サンプル
Server側
SampleSoketServer.java
package com.soket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class SampleSoketServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; BufferedReader bufferedReader = null; PrintStream printStream = null; Socket clientSocket = null; try { System.out.println("Running"); // ポート10999番を開く serverSocket = new ServerSocket(10999); System.out.println("ServerSocket accepting"); while (true) { clientSocket = serverSocket.accept(); System.out.println("ServerSocket accepted"); bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); System.out.println("Processing."); printStream = new PrintStream(clientSocket.getOutputStream()); System.out.println("Processing.."); String result; result = bufferedReader.readLine(); System.out.println("Processing..."); if (result != null) { // とりあえず、コンソール画面に吐き出してみる System.out.println("Received " + result); printStream.println("Hellow World " + result + "!!"); } } } catch (IOException ex) { ex.printStackTrace(); } finally { if (clientSocket != null) { clientSocket.close(); } if (printStream != null) { printStream.close(); } if (bufferedReader != null) { bufferedReader.close(); } if (serverSocket != null) { serverSocket.close(); } } } }
Client側
SampleSoketClient.java
package com.soket; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; public class SampleSoketClient { public static void main(String[] args) throws IOException { Socket socket = null; DataOutputStream dataOutputStream = null; BufferedReader bufferedReader = null; try { // ポート10999番を開く socket = new Socket("localhost", 10999); dataOutputStream = new DataOutputStream(socket.getOutputStream()); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); if (socket != null && dataOutputStream != null && bufferedReader != null) { String inputData = null; if (args != null && args.length > 0) { inputData = args[0] + "\n"; // !注意! このサンプルではクライアント側の作りにより、"\n"が必須(あくまでこのサンプルでは) } else { inputData = "Mike\n"; // !注意! このサンプルではクライアント側の作りにより、"\n"が必須(あくまでこのサンプルでは) } dataOutputStream.writeBytes(inputData); // サーバーからのメッセージを受け取り画面に表示します String responseLine; if ((responseLine = bufferedReader.readLine()) != null) { System.out.println("From Server: " + responseLine); } } } catch (UnknownHostException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } finally { if (dataOutputStream != null) { dataOutputStream.close(); } if (bufferedReader != null) { bufferedReader.close(); } if (socket != null) { socket.close(); } } } }
実行の仕方
* Eclipse で開発していると、2つ同時にJavaプログラムを実行するのがめんどい。
手順
[1] Eclipse で、Server側のプログラムを実行しておく(そのまま放置) [2] コマンドプロンプトを起動し、プロジェクトの「bin」配下まで移動する cd [プロジェクトの「bin」までのパス] [3] コマンドプロンプトで、クライアントプログラムをjavaコマンドで実行 ■ 例1 java com.soket.SampleSoketClient => Server側とClient側のコンソール画面に「Received Mike」「From Server: Hellow World Mike」が表示 ■ 例2 java com.soket.SampleSoketClient Tom => Server側とClient側のコンソール画面に「Received Tom」「From Server: Hellow World Tom」が表示
実行時でのトラブル
手順[3]実行時でエラー「NoClassDefFoundError」が表示された場合
以下を参照のことhttp://blogs.yahoo.co.jp/dk521123/33075162.html
参考文献
* 非常にシンプルで分かりやすいhttp://www.akirakoyasu.net/2013/04/21/how-to-implement-tcp-server-in-java/
http://www.gadgety.net/shin/java/sockets.html