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