ネットワークプログラム
ネットワーク上の他のホストと通信するプログラム。ソケット通信
利用するクラス
ソケットを利用するにはサーバの名前または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 メッセージ