protobuf と Java を使用してエコー サーバー/クライアントを作成したいだけです。
protobuf-java-2.4.1 と jdk1.7 でテストしました。
以下のようなエコーサーバーコードを書きました
// create server socket and accept for client connection.
// ...
link = servSock.accept();
Person person = Person.parseFrom(link.getInputStream()); // blocking position
person.writeTo(link.getOutputStream());
Person.proto に注意する必要はないと思います。
クライアントコードは、ソケット入力ストリームを使用して Person オブジェクトを送信し、エコー Person オブジェクトを受信するだけです。
// socket connect code was omitted.
Person person = Person.newBuilder().setId(1).setName("zotiger").build();
person.writeTo(echoSocket.getOutputStream());
person = Person.parseFrom(echoSocket.getInputStream());
しかし、サーバーとクライアントの両方が実行されている場合、サーバーは parseFrom 関数でブロックされました。
writeDelimitedTo() と parseDelimitedFrom() を使用すれば問題ないことがわかりました。writeTo() および parseFrom() 関数が機能しない理由がわかりません。
サーバーがそこでブロックされたのはなぜですか?
クライアント側から終了信号を送信する必要がありますか?