我正试图从服务器向所有客户端广播消息,但只有一个客户端接收到该消息。
我想运行这个服务器和这个客户端的两个或多个实例(取自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标志