【问题标题】:Multiple Recv Calls Socket C Programming多个 Recv 调用 Socket C 编程
【发布时间】:2017-09-28 18:57:35
【问题描述】:

我目前开始学习使用 C 编程语言编写套接字。我想知道在服务器接收多条消息的情况下,假设我想将文件从客户端传输到服务器。我在这种情况下的问题是,在每次调用 recv 函数之前,我是否必须多次调用 accept 函数?或者我可以简单地accept 一次从客户端连接一次并多次调用recv

【问题讨论】:

  • 您只为每个新的入站 TCP 连接调用一次 accept(),而不是每个数据包一次。
  • 好的,但是我如何知道我是否收到了recv 的消息?因为它一直在听垃圾。
  • 所以你不断地向它发送垃圾。解决方法:不要。
  • '我怎么知道我是否在 recv 中收到了一条消息' - 返回的值(我确定你完全正确地处理了......?),更大大于 0 并指示加载到缓冲区中的字节数。 '它一直在听垃圾' - 代码请。尤其是使用 strlen()、printf("%s"..) 或需要保证以 NUL 结尾的 char 数组的类似调用...
  • 与往常一样,在复杂系统中进行调试时,首先要拆分问题。使用wireshark 或类似工具来确定问题出在服务器、客户端还是两者兼而有之。就像@EJP 说的那样,也许你正在发送垃圾。

标签: c sockets


【解决方案1】:

假设您正在使用 TCP 连接(“套接字编程”涵盖了各种各样的主题,但 TCP 是最常见的)accept 通过套接字完成您的应用程序和交易对手之间的连接并设置一个不同的套接字应该用于传输数据。实际的数据传输发生在这个新的套接字上。所以每个连接只调用一次accept。
See this page for a detailed description of what accept does.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2013-12-13
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多