StackShelf
プログラミング 第13回

Javaネットワーク入門|SocketとTCP通信

TCPソケット、ServerSocket/Socket、入出力ストリーム、簡易エコーサーバー/clientの作り方とポート・ファイアウォールなど失敗例を学びます。

3分で読める
JavaネットワークSocket

結論:Javaのネットワーク通信はSocketでTCP接続を張り、入出力ストリームでデータをやり取りする

TCPは信頼性のある双方向通信です。サーバー側は ServerSocket で待ち受け、クライアントは Socket で接続します。

簡易サーバー

try (ServerSocket server = new ServerSocket(8080)) {
    System.out.println("Listening...");
    try (Socket client = server.accept();
         var in = new BufferedReader(new InputStreamReader(client.getInputStream()));
         var out = client.getOutputStream()) {
        String line = in.readLine();
        out.write(("Echo: " + line + "\n").getBytes(StandardCharsets.UTF_8));
    }
}

クライアント

try (Socket socket = new Socket("localhost", 8080);
     var out = new PrintWriter(socket.getOutputStream(), true);
     var in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
    out.println("Hello");
    System.out.println(in.readLine());
}

失敗例:サーバー未起動で接続

ConnectException: Connection refused — ポート・ホスト・ファイアウォールを確認します。

失敗例:ポート占有

BindException: Address already in use — 前回のプロセスが残っていないか、別ポートを試します。

HTTPとの関係

WebのHTTPもTCPの上で動きます。実務では java.net.http.HttpClient(Java 11+)やSpring WebClientを使うことが多いですが、Socket理解はトラブルシュートの基礎になります。

まとめ

ネットワークプログラミングはリソース解放(try-with-resources)とエラー処理が重要です。localhostでエコーサーバーを動かし、次回はスレッドで複数クライアントに対応する方向を学びます。

まとめ

JavaのTCP通信はServerSocket/Socketとストリームで実装します。Connection refusedとポート占有は初学者がよく遭遇するエラーです。localhost:8080のエコーサーバー/クライアントをペアで動かしてみましょう。

次にやること

ポート8080のエコーサーバーとクライアントを作り、サーバー起動後にクライアントから1行送って応答を確認してください。

よくある質問

UDPは?

DatagramSocket/DatagramPacketで扱います。TCPより軽量だが到達保証なし。動画配信などに使われます。

localhost と 127.0.0.1?

同じ意味のループバックアドレス。自分のマシン上のサービスに接続します。

本番でServerSocketを直接書く?

学習目的では有効。本番WebはServlet/Spring、HTTPクライアントはHttpClientを使います。

タイムアウトは?

socket.setSoTimeout(ms) で読み取り待ちを制限できます。

TLS/HTTPSは?

SSLSocketで暗号化。証明書管理が必要で、HttpClient利用が現実的です。

次に読むべき記事

同カテゴリ「プログラミング」の記事

学習ルート

体系的に学びたい方はこちらから。

エラー解決コース →

あわせて読みたい