我只想使用 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() 函数不起作用。
为什么服务器阻塞在那里?
是否有必要从客户端发送一些结束信号?