我使用协议缓冲区来构建数据结构,在服务器端,我使用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来结束数据传输的原因……
发布于 2013-01-16 15:02:30
如果连接已关闭,则recv()返回0。
要从客户端关闭连接,请通过调用socket.close()关闭套接字。
https://stackoverflow.com/questions/14352023
复制相似问题