Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

Socketクラス

クライアント側のソケットを操作する – Socketクラス
Socket(InetAddress address, int port)
Socket(String host, int port)
address:接続先のアドレス
host:接続先のホスト
port:ポート番号

同じくクライアントソケットを生成します。サーバーソケットがない分、クライアントソケットはよりシンプルです。Socketクラスを直接インスタンス化して、ソケットを準備します。Socketクラスの主なメソッドは、以下の通りです。

Socketクラスの主なメソッド
メソッド 概要
void bind(SocketAddress point) ソケットをローカルアドレスにバインド
void close() ソケットを閉じる
void connect(SocketAddress end) ソケットをサーバーに接続
InetAddress getInetAddress() 接続先のアドレスを取得
InputStream getInputStream() 入力ストリームを取得
int getLocalPort() バインド先のローカルポート番号を取得
SocketAddress getLocalSocketAddress() バインドされているアドレスを取得
OutputStream getOutputStream() 出力ストリームを取得
int getPort() 接続先のリモートポート番号を取得
SocketAddress getRemoteSocketAddress() 接続先のアドレスを取得
boolean isConnected() ソケットが接続されているかどうかを判定

以下は、サーバーソケットと通信するためのクライアントソケットの例です。サーバーソケットの例については、前項を参照してください。

SocketClient.java

package com.example.mynavi.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClient {
  public static void main(String[] args) {
    // クライアントソケットを生成
    try (Socket socket = new Socket("localhost", 8080);
        PrintWriter writer = new PrintWriter(
          socket.getOutputStream(), true);
        BufferedReader reader = new BufferedReader(
          new InputStreamReader(socket.getInputStream()));
        // 入出力のためのReader/Writerを生成
        BufferedReader keyboard = new BufferedReader(
          new InputStreamReader(System.in))) {
      // 「q」を入力するまで、入力文字列をサーバーに送信
      while (true) {
        System.out.print("Input>");
        String input = keyboard.readLine();
        writer.println(input);
        if (input.equals("\q")) {
          break;
        }
        System.out.println("[Server]" + reader.readLine());
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

↓

Input>alpha
[Server]ALPHA
Input>project
[Server]PROJECT
Input>q

サンプルを動作するには、サーバーソケットをあらかじめ起動した上で、別のコマンドプロンプトでクライアントソケットを起動してください。

関連ページ
ServerSocket

ソケット通信
ServerSocketクラス
Socketクラス
URLConnectionクラス

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職