我正在尝试从服务器向所有客户端广播一条消息,但是只有一个客户端收到该消息。
我想运行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
时陷入困境。
我是否以错误的方式运行服务器/客户端,或者代码中缺少某些内容?我是套接字的新手,所以我看不到服务器代码中是否包含任何内容,例如“我只会广播给一个客户端”。
您能给我一些正确的方向吗?关于广播还有其他问题和答案,但我还没有找到解决这个特定问题的方法。谢谢。
答案 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标志