DEV

Android - socket

パーミッション設定

インターネット接続する場合、AndroidManifest.xmlにパーミッション設定を書く必要がある。

<uses-permission android:name="android.permission.INTERNET"/>

インターネット接続をActivityのonCreateとかで使うとエラーになる。UIスレッドで使ってはいけない。別のスレッドで使う。AsyncTaskのdoInBackgroundとかでやる。

http通信してみる

MainActivity.java

public class MainActivity extends AppCompatActivity {
private MyTask task;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
task = new MyTask();
task.execute();
}
}

MyTask.java

public class MyTask extends AsyncTask<Integer, Integer, Integer> {
static final String host = "google.com";
static final String path = "/";
@Override
protected Integer doInBackground(Integer...x) {
try {
Socket socket = new Socket();
socket.connect(new InetSocketAddress(host, 80));
String request = "GET " + path + " HTTP/1.1\n" +
"Host: " + host + "\n" +
"\n\n";
OutputStream out = socket.getOutputStream();
out.write(request.getBytes());
out.flush();
InputStream in = socket.getInputStream();
byte[] buffer = new byte[1024];
int length;
while((length = in.read(buffer)) != -1) {
Log.d("TEST", new String(buffer, 0, length));
}
out.close();
in.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
return 1;
}
}