我使用协议缓冲区来制作数据结构,并在服务器端编写以下代码以使用 Java 发送消息,同时使用 C 在客户端接收消息。
Java 服务器:
OutputStream os = socket.getOutputStream();
GameResponse.Builder builder=GameResponse.newBuilder();
builder.build().writeTo(os);
os.flush();
os.close();
C 客户:
while ((n = ::recv(sockfd, buf, BUFFLEN, 0)) > 0) {
write(STDOUT_FILENO, buf, n);
len += n;
}
原来从服务器发送的消息是正确的,但客户端无法接收。看起来while循环永远不会中断它进入死循环。我们认为这可能是 C recv 函数从未获得 EOF 来结束数据传输的原因......