edo1z blog

プログラミングなどに関するブログです

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;
    }
}