UDP客户端没有bind()接收不到数据

UDP client does not receive data without bind()

我参考了 binarytides 的 UDP 客户端程序,我能够将 UDP 数据包从 py PC 发送到 UDP 服务器,这是我的嵌入式设备,并且该设备回显 UDP 消息。

在此 PC-UDP 客户端代码中,预计会收到回显消息,但我没有收到任何回显 back.So 我 运行 我的 PC 中有一个 UDP 服务器,用于侦听输入数据并打印它,我能够看到来自我的嵌入式设备的回显消息。

当我在代码中的 while(1) 循环之前添加这些行时,现在我能够看到回显消息。

 //setup address structure
memset((char *) &si_server, 0, sizeof(si_server));
si_server.sin_family = AF_INET;
si_server.sin_port = htons(PORT);
si_server.sin_addr.S_un.S_addr = INADDR_ANY;

if( bind(s ,(struct sockaddr *)&si_server , sizeof(si_server)) == SOCKET_ERROR)
{
    printf("Bind failed with error code : %d" , WSAGetLastError());
    exit(EXIT_FAILURE);
}
puts("Bind done");

对可能导致此问题的原因有任何想法吗?

嗨,我终于从 EJP answer

找到了答案

只需要bind()一个服务器,因为客户端需要一个固定的端口号来发送。客户端根本不需要 bind():自动 bind() 将使用系统分配的本地端口号在第一个 send()/sendto()/recv()/recvfrom() 上发生。

在 wireshark 的帮助下,我能够看到我的 PC 正在从端口 53701 发送数据,并且在第一次 sendto() 时这个端口被自动绑定,所以必须进行显式绑定。