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

时间:2012-06-13 17:46:59

标签: c++ sockets udp port

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

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

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

  • 将发送和接收套接字绑定到选定的端口,以便在外部程序发回消息时可以接收它。
  • 更新接收套接字所绑定的端口,以便在我上次发送消息的端口上接收(不确定这是否会造成竞争条件)。
  • 其他一些正确的方法。

到目前为止,我已经尝试过:

  • 不绑定发送套接字(它从一些开放端口发送到目标端口)。只要它没有改变,我就可以成功地在该端口上接收消息,但最终它确实会发生变化。
  • 将发送和接收套接字绑定到所需的端口。当我使用嗅探器观察数据包时,这会产生所需的行为,但接收套接字永远不会收到消息,即使我看到它们被传输到正确的端口和IP。

正在从多个外部实体收到数据包,并且不保证以任何特定顺序。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

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