2

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

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

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

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

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

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

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

先感谢您!

4

1 回答 1

1

看起来您正在尝试使用线程来分离发送和接收数据。我会质疑这种方法,因为 UDP 在一个线程中很容易处理。不过,如果需要,您可以只使用两个线程中的相同套接字(请参阅相关问题:在同一个套接字上对发送/接收的并行调用有效吗?)。只是bind(2)它,并且,可选地,connect(2)它。

于 2012-06-13T21:27:25.280 回答