首页 文章

C在发送的同一端口上接收UDP数据包

提问于
浏览
2

我有2个UDP套接字( SOCKET ),一个用于发送,一个用于在Windows机器上接收 . 它们都运行良好,但问题是从我的发送套接字接收消息的程序回复发送消息的同一端口 .

我知道如果我没有绑定发送套接字,使用 sendto 将选择一个临时端口发送 .

我想知道是否可以执行以下任何操作,如果是,建议的方法是什么:

  • 将发送和接收套接字绑定到选定的端口,以便在外部程序发回消息时可以接收它 .

  • 更新接收套接字所绑定的端口,以便在我上次发送消息的端口上接收(不确定这是否会产生竞争条件) .

  • 其他一些正确的方法 .

到目前为止,我尝试过:

  • 不绑定发送套接字(它从一些开放端口发送到目标端口) . 只要它没有改变,我就可以成功地在该端口上接收消息,但最终它确实会发生变化 .

  • 将发送和接收套接字绑定到所需端口 . 当我使用嗅探器观察数据包时,这会产生所需的行为,但接收套接字永远不会收到消息,即使我看到它们被传输到正确的端口和IP .

数据包是从多个外部实体接收的,并不保证按任何特定顺序 .

先感谢您!

1 回答

  • 1

    看起来您正在尝试使用线程来分隔发送和接收数据 . 我会质疑这种方法,因为UDP在一个线程中很容易处理 . 不过,如果需要,您可以从两个线程中使用相同的套接字(请参阅相关问题:Are parallel calls to send/recv on the same socket valid?) . 只需 bind(2) 它,并且可选地, connect(2) 它 .

相关问题