c-服务器只向第一个客户端广播



我正试图从服务器向所有客户端广播消息,但只有一个客户端接收到该消息。

我想运行这个服务器和这个客户端的两个或多个实例(取自Donahoo,Calvert,"C中的TCP/IP套接字",1e;我可以根据请求将代码粘贴到这个问题中(。

这些程序可以在单个客户端上正常工作,但当运行两个客户端时,只有一个(第一个(会收到消息,而第二个实例会被卡住(在bind上(。

我不知道我做错了什么,我确信程序是正确的,所以也许我运行错了。我启动服务器为:

$ ./BroadcastSender localhost 1337 hey &

至于客户,我尝试了两种变体,第一种:

$ ./BroadcastReceiver 1337 & ./BroadcastReceiver 1337 &

在第二个变体中,我在close(sock)之后添加了while (1) {},然后运行为:

$ ./BroadcastReceiver 1337 &
$ ./BroadcastReceiver 1337 &

两种变体都给出了相同的结果,即第一个客户端接收到消息,另一个客户端没有,而是在尝试bind时陷入困境。

我是以错误的方式运行服务器/客户端,还是代码中缺少什么?我是套接字的新手,所以我真的看不出服务器代码中是否有什么内容,比如说"我只向一个客户端广播"。

你能给我一些正确的方向吗?关于广播还有其他问题和答案,但我还没有找到一个能解决这个特殊问题的。非常感谢。

你不能让两个进程绑定在同一个端口上。不熟悉广播公司,但通常你有两个选项-要么在同一网络上的两台机器上运行这两个进程,要么在不同的端口上运行客户端,并让广播公司在几个端口上广播

在2台机器上运行2个进程时的命令行应该类似于:

$ ./BroadcastSender 127.0.255.255 1337 hey &

当127.0.255.255是您的子网掩码时

---编辑(谢谢@Jeremy(---

还可以使用setsockopt将两个套接字绑定到同一UDP端口带有SO_REUSEADDR/SO_REUSEPORT标志

最新更新