トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

オブジェクト指向プログラミング(2004-01-07)

ネットワークプログラム

ネットワーク上の他のホストと通信するプログラム。ソケット通信

利用するクラス

ソケットを利用するにはサーバの名前またはIPアドレスポート番号が必要。

プログラムの流れは次の図の通り。http://k-sakabe.com/file/ClientServer.jpg

サンプルプログラム

 サーバのプログラム

import java.net.*;
import java.io.*;

public class TcpEchoServer {
   public static void main(String[] args) throws IOException {
       ServerSocket servSock = new ServerSocket(); // サーバソケットの生成
       // ホスト名とポート番号が示すアドレスにバインド
       servSock.bind(new InetSocketAddress(args[0], 8189));
       int recvMsgSize = 4096;
       byte[] byteBuffer = new byte[recvMsgSize]; // 受信バッファ
       Socket clntSock = servSock.accept();// クライアント接続を取得
       String clntLog = clntSock.getInetAddress().getHostAddress();
       System.out.println(clntLog);
       InputStream in = clntSock.getInputStream();// 受信用ストリーム
       OutputStream out = clntSock.getOutputStream();// 送信用ストリーム
       recvMsgSize = in.read(byteBuffer);//受信
       System.arraycopy(args[0].getBytes(), 0, byteBuffer, recvMsgSize, args[0].length());
       out.write(byteBuffer, 0, recvMsgSize+args[0].length());
       System.out.write(byteBuffer, 0, recvMsgSize);
       clntSock.close();
   }
}

 クライアントプログラム

import java.net.*;
import java.io.*;

public class TcpEchoClient {
   public static void main(String[] args) throws UnknownHostException, IOException {
       int bytesRcvd = 4096;
       byte[] byteBuffer = new byte[bytesRcvd];
       Socket socket = new Socket(args[0], 8189);
       InputStream in = socket.getInputStream();
       OutputStream out = socket.getOutputStream();
       out.write(args[1].getBytes());
       System.out.println("文字列送信:" + args[1]);
       bytesRcvd = in.read(byteBuffer);
       System.out.print("文字列受信:" + new String(byteBuffer).trim());
       System.out.println(" 合計倍と数:" + bytesRcvd);
       socket.close();
   }
}

それぞれを別ファイルで保存、コンパイル。

プログラムはサーバを先に起動し、クライアントを後で起動する。2つのMS-DOSプロンプトを開く。cpadを使っている場合はCtrl+Qで起動できる。

java TcpEchoServer localhost
java TcpEchoClient localhost メッセージ

演習

  • 自分のPCで動作確認する。
  • 複数のPCで通信できることを確認する。
  • クライアントGUIを使ったプログラムにする。

[オブジェクト指向プログラミング]