2

我使用协议缓冲区来制作数据结构,并在服务器端编写以下代码以使用 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 来结束数据传输的原因......

4

1 回答 1

1

recv()0如果连接已关闭,则返回。

要从客户端关闭连接,请通过调用关闭套接字socket.close()

于 2013-01-16T07:02:29.633 回答