オブジェクトのソケット通信
オブジェクトを送受信するソケット通信のサンプルコードが見つからなかったので,ここで晒します.
「形態素解析を高速に処理&クライアント側に形態素解析器環境不要」を実現したかったので,``ArrayList
HelloWorldMultiThreadServer.java
import java.net.ServerSocket; import java.net.Socket; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.util.ArrayList; public class HelloWorldMultiThreadServer { public static void main(String argv[]) { try { // サーバーソケットの生成 ServerSocket serverSocket = new ServerSocket(5555); // メインループ while(true) { try { System.out.println("クライアントからの接続をポート5555で待ちます"); Socket s = serverSocket.accept(); ArrayList<String> data = new ArrayList<String>(); // 受信 ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); data = (ArrayList<String>)(ois.readObject()); // データ加工(ここでは頭に0を付与 for(int i=0; i<data.size(); i++){ data.set(i, "0" + data.get(i)); } // 返信 ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream()); oos.writeObject(data); // ソケット削除 s.close(); } catch (Exception ex) { ex.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } } }
HelloWorldSocketClient.java
import java.net.ServerSocket; import java.net.Socket; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.util.ArrayList; public class HelloWorldSocketClient { public static void main(String[] args){ ArrayList<String> data = new ArrayList<String>(); data.add("サンプルテキスト1"); data.add("サンプルテキスト2"); try{ // ソケットを生成 Socket socket = new Socket("localhost", 5555); // オブジェクト出力ストリーム ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream() ); // 書き出し oos.writeObject(data); // オブジェクト入力ストリーム ObjectInputStream ois = new ObjectInputStream( socket.getInputStream() ); data = (ArrayList<String>)( ois.readObject() ); // 出力 for(String line : data){ System.out.println(line); } // ソケットを削除 socket.close(); } catch(Exception e){ e.printStackTrace(); } } }