服务器仅广播到第一个客户端

时间:2018-11-11 16:05:40

标签: c sockets broadcast

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

我想运行this server和两个或更多个this client实例(摘自Donahoo,Calvert,“ C中的TCP / IP套接字”,1e;我可以将代码粘贴到以下问题中请求)。

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

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

$ ./BroadcastSender localhost 1337 hey &

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

$ ./BroadcastReceiver 1337 & ./BroadcastReceiver 1337 &

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

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

两个版本的结果相同,即第一个客户端收到消息,另一个客户端没有收到消息,而是试图bind时陷入困境。

我是否以错误的方式运行服务器/客户端,或者代码中缺少某些内容?我是套接字的新手,所以我看不到服务器代码中是否包含任何内容,例如“我只会广播给一个客户端”。

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

1 个答案:

答案 0 :(得分:2)

您不能在同一端口上绑定2个进程。不熟悉广播公司,但通常您有2个选择-在同一网络的2台计算机上运行2个进程,或在单独的端口上运行客户端,并在多个端口上广播广播公司

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

$ ./BroadcastSender 127.0.255.255 1337 hey &

当127.0.255.255是您的子网掩码

---编辑(感谢@Jeremy)---

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