【发布时间】:2017-09-28 18:57:35
【问题描述】:
我目前开始学习使用 C 编程语言编写套接字。我想知道在服务器接收多条消息的情况下,假设我想将文件从客户端传输到服务器。我在这种情况下的问题是,在每次调用 recv 函数之前,我是否必须多次调用 accept 函数?或者我可以简单地accept 一次从客户端连接一次并多次调用recv?
【问题讨论】:
-
您只为每个新的入站 TCP 连接调用一次
accept(),而不是每个数据包一次。 -
好的,但是我如何知道我是否收到了
recv的消息?因为它一直在听垃圾。 -
所以你不断地向它发送垃圾。解决方法:不要。
-
'我怎么知道我是否在 recv 中收到了一条消息' - 返回的值(我确定你完全正确地处理了......?),更大大于 0 并指示加载到缓冲区中的字节数。 '它一直在听垃圾' - 代码请。尤其是使用 strlen()、printf("%s"..) 或需要保证以 NUL 结尾的 char 数组的类似调用...
-
与往常一样,在复杂系统中进行调试时,首先要拆分问题。使用wireshark 或类似工具来确定问题出在服务器、客户端还是两者兼而有之。就像@EJP 说的那样,也许你正在发送垃圾。