C++ 从服务器端的客户端接收数据失败

C++ 从服务器端的客户端接收数据失败,c++,protocol-buffers,C++,Protocol Buffers,我问了几个关于套接字传输的协议缓冲区的问题……同样,当我想在服务器端从客户端接收数据时,我遇到了一个问题 以下是客户端代码: int sendSystem(int sockfd, const void *buf, size_t nbytes, int flags) { return ::send(sockfd, buf, nbytes, flags); GameRequest gameRequest=GameRequest.parseFrom(CodedInputStream.newInsta

我问了几个关于套接字传输的协议缓冲区的问题……同样,当我想在服务器端从客户端接收数据时,我遇到了一个问题

以下是客户端代码:

int sendSystem(int sockfd, const void *buf, size_t nbytes, int flags) {
return ::send(sockfd, buf, nbytes, flags);
GameRequest gameRequest=GameRequest.parseFrom(CodedInputStream.newInstance(socket.getInputStream()));
GameRequest gameRequest=GameRequest.parseDelimitedFrom(socket.getInputStream());
GameRequest gameRequest=GameRequest.parseFrom(socket.getInputStream());
}

这就像客户端发送数据时使用的是代表每个字节的整数,所以数据是以字节为单位传输的

以下是服务器端代码:

int sendSystem(int sockfd, const void *buf, size_t nbytes, int flags) {
return ::send(sockfd, buf, nbytes, flags);
GameRequest gameRequest=GameRequest.parseFrom(CodedInputStream.newInstance(socket.getInputStream()));
GameRequest gameRequest=GameRequest.parseDelimitedFrom(socket.getInputStream());
GameRequest gameRequest=GameRequest.parseFrom(socket.getInputStream());

我尝试了上面的每种方法来接收数据并对其进行解析…结果没有一种方法是好的..大多数情况下,我只是收到一条消息,如“消息具有无效标记”,或者如果我打开调试模式,它只是在上面的代码行中待命,我无法移动到下一步或进入调用方法,因为按钮“跨步”和“跨步进入”被禁用…

我将其重新标记为“c++”,因为它显然不是c。protobuf流不知道自己的长度;如果您保持流打开(即,如果发送后未关闭出站套接字),则接收方将不知道数据已完成。除非您添加“帧”,例如一个带有要读取字节数的头(显然是在接收器处处理这些字节),等等。这或许可以解释一些奇怪的现象。。