ServerSocketクラス
サーバー側のソケットを操作する – ServerSocketクラス- public ServerSocket(int port) throws IOException
- port:ポート番号
ソケット通信では、通信を試みるコンピューター(クライアント)と待ち受けるコンピューター(サーバー)とが存在します。
サーバーソケットを表すのは、ServerSocketクラス(java.netパッケージ)の役割です。ServerSocketクラスの主なメソッドは、以下の通りです。
| ServerSocketクラスの主なメソッド | |
|---|---|
| メソッド | 概要 |
| Socket accept() | 接続要求を待機 |
| void bind(SocketAddress end) | ソケットをバインド(endはバインド先のアドレス) |
| void close() | ソケットを閉じる |
たとえば、以下にサーバーソケットの最小限のコードを示します。クライアントからなんらかの入力を受け取ると、その値を大文字に変換したものをクライアントに返します。サーバー側には、入力された値をそのまま表示します。
SocketServer.java
package com.example.mynavi.socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) {
// サーバーソケットを生成&待機
try (ServerSocket server = new ServerSocket()) {
server.bind(new InetSocketAddress("localhost", 8080));
try (Socket socket = server.accept();
BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(
socket.getOutputStream(), true)) {
// 入力を受け取ったら、大文字に変換の上で応答
while (true) {
String line = reader.readLine();
if (line.equals("\q")) {
break;
}
writer.println(line.toUpperCase());
System.out.println(line);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
![]()
alpha project … クライアントから受け取った値を表示
※クライアント側の結果は以下を参照
ソケット固有の操作は太字の部分だけです。bindメソッドは、ソケットを指定のIPアドレス/ポート番号にバインドします。acceptメソッドは、クライアントからの要求を待機します。要求を受け付けたタイミングで、ソケット(Socketオブジェクト※)を取得します。
ソケットを取得できてしまえば、あとはこれをもとに、入力/出力のためのReader/Writerを生成し、読み込みや書き込みを行います。読み書きの方法については、「ストリーム」節で触れています。
関連ページ
Socket






