我正在尝试在 2 台计算机上做一个 2 路广播系统。这是我第一次使用 C++ 进行网络编程。假设我有计算机 A 和计算机 B,每个声明 2 个套接字,每台计算机和客户端上的套接字 sd 和 sd1,每台计算机上的服务器声明。在计算机 A 上,计算机 A 上的套接字 sd 绑定到计算机 A 上的客户端 IP 192.168.2.100:50000。然后它使用以下方法从广播计算机 B 接收信息:
recvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)
在计算机 B 上,socket sd 设置为广播使用:
setsockopt(sd, SOL_SOCKET, SO_BROADCAST, (char *)&broadcastpermission, sizeof(struct sockaddr_in))
但由于广播使用,sd 未绑定。然后计算机 B 使用以下命令向计算机 A 广播信息:
sendto(sd, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))
其中计算机 B 上声明的服务器的 IP 为 192.168.2.100:50000(与计算机 A 上的客户端 IP 相同,以便广播到该 IP)。
当计算机 B 向计算机 A 广播时,上述方法工作正常。但是,当我尝试反向执行相同操作时,计算机 A 向计算机 B 广播,它不起作用。在计算机 A 上,socket sd1 被声明并设置为广播使用:
setsockopt(sd1, SOL_SOCKET, SO_BROADCAST, (char *)&broadcastpermission, sizeof(struct sockaddr_in))
并且 sd1 未绑定,计算机 A 使用以下命令向计算机 B 广播:
sendto(sd1, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))
其中服务器被声明为 IP 192.168.2.2:40000 (它是计算机 B 的客户端 IP 地址,以便在那里广播)。在计算机 B 上,socket sd1 被声明并绑定到客户端,并在 IP 192.168.2.2:40000 处自动获取 IP。计算机 B 使用以下命令接收广播:
recvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)
我为这个很长的故事道歉,但我需要尽可能清楚。谁能说出为什么计算机 B 不能从计算机 A 接收广播的任何可能性?