【问题标题】:Can UDP (unicast client) recvfrom() other servers other than the one sendto()?UDP(单播客户端)recvfrom()除了一个sendto()之外的其他服务器吗?
【发布时间】:2009-06-15 10:03:57
【问题描述】:

我正在用 C(单播)创建一个 UDP 套接字客户端,我想知道为什么 recvfrom() 有一个 struct sockaddr * 参数,其中在手册页中说, 空指针,或指向要存储发送地址的 sockaddr 结构。

我是否有可能收到来自不同于我发送到的服务器的消息?如果是,如何创建这个场景?

如果不是,说这个参数只在使用广播模式时有用对吗?

【问题讨论】:

    标签: sockets network-programming


    【解决方案1】:

    是的,这是完全可能的。这样做的原因是 UDP 不是基于流的,而是基于数据包的。每个数据包都没有任何历史记录(发送或接收的其他数据包)。

    出于这个原因,您也可以打开一个 UDP 端口,然后从它向不同的主机发送数据包。但是,我不记得 API 对此的支持情况如何。

    【讨论】:

      【解决方案2】:

      UDP 套接字将recvfrom() 任何具有正确端口的主机发送到此主机,除非您明确地connect(),在这种情况下,您可以只使用write()read(),并在收到 ICMP 消息时出错。

      【讨论】:

        【解决方案3】:

        考虑到在 UDP 中总是有两方,显然有人必须先进行 recvfrom()。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-16
          • 1970-01-01
          • 2018-05-12
          • 2015-06-21
          • 1970-01-01
          相关资源
          最近更新 更多