c++ - 接收所有使用 C 套接字发送的数据

标签 c++ c sockets winsock winsock2

如果我写一个服务器,如果我不知道客户端如何发送数据,我如何实现接收函数来获取特定客户端发送的所有数据?
我正在使用 TCP/IP 协议(protocol)。

最佳答案

如果您真的没有定义协议(protocol),那么您所能做的就是在客户端到达时接受来自客户端的字节组。如果没有定义的协议(protocol),就没有办法知道你已经收到了客户端发送的“所有字节”,因为在传输过程中总是有可能在客户端和你的服务器之间的某个地方发生网络故障,导致最后一部分流不到达服务器。在这种情况下,您会从 TCP 套接字获得通常的流结束指示(例如 recv() 返回 0,或者如果您使用的是非阻塞套接字则为 EWOULDBLOCK),因此您会知道您不会从客户端接收更多数据(因为 TCP 连接现在已断开连接)...但这与知道您已收到客户端为您接收的所有数据并不完全相同。

根据您的应用程序,这可能就足够了。如果没有,那么您将不得不制定一个协议(protocol),并相信您的客户会遵守该协议(protocol)的规则。让客户端首先发送一个 header ,说明它计划发送多少字节是一个好方法;或者让它发送一些特殊的“好吧,这就是我想要发送的”指示符也是可能的(尽管如果你这样做,如果特殊指示符可能偶然出现在数据本身内部,你必须注意误报)

关于c++ - 接收所有使用 C 套接字发送的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123998/

相关文章:

c# - 如何使用C#套接字发送内存流?

sockets - boost asio SO_REUSEPORT

c++ - 删除 map 的最后 5 个元素

c# - 连接: an invalid argument was supplied上Windows XP家庭版的SocketException

c++ - 编译 Caffe C++ 分类示例

c - 如何跳过多维数组中的行

C: 解释 if(exit(0),0){} 行代码

c++ - 为什么我的代码块上没有显示输出?

c++ - 如何在 OpenGL 中只平移场景中的一个对象?

c++ - 如何检查是否相等? (0 == i) 或 (i == 0)