サーバー側のソケットを操作する – 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 (var server = new ServerSocket()) {
- server.bind(new InetSocketAddress("localhost", 8080));
- try (var socket = server.accept();
- var reader = new BufferedReader(
- new InputStreamReader(socket.getInputStream()));
- var writer = new PrintWriter(
- socket.getOutputStream(), true)) {
- // 入力を受け取ったら、大文字に変換の上で応答
- while (true) {
- var line = reader.readLine();
- if (line.equals("\q")) {
- break;
- }
- writer.println(line.toUpperCase());
- System.out.println(line);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
↓
- alpha
- project … クライアントから受け取った値を表示
※クライアント側の結果は「Socketクラス」を参照
ソケット固有の操作は太字の部分だけです。bindメソッドは、ソケットを指定のIPアドレス/ポート番号にバインドします。acceptメソッドは、クライアントからの要求を待機します。要求を受け付けたタイミングで、ソケット(Socketオブジェクト)を取得します。
ソケットを取得できてしまえば、あとはこれをもとに、入力/出力のためのReader/Writerを生成し、読み込みや書き込みを行います。読み書きの方法については、「ストリーム」節で触れています。
関連ページ
監修
山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。