gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:54 26 4
gpt4 key购买 nike

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

我要运行 this server以及 this client 的两个或多个实例(取自 Donahoo,Calvert,“C 中的 TCP/IP 套接字”,1e;我可以根据要求将代码粘贴到这个问题中)。

程序在单个客户端上运行良好,但当运行两个客户端时,只有一个(第一个)收到消息,而第二个实例只是卡住(在 bind 上)。

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

$ ./BroadcastSender localhost 1337 hey &

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

$ ./BroadcastReceiver 1337 & ./BroadcastReceiver 1337 &

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

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

这两种变体给出相同的结果,即第一个客户端收到消息,另一个没有,而是卡在尝试绑定(bind)

我是否以错误的方式运行服务器/客户端,或者代码中是否缺少某些内容?我是套接字的新手,所以我真的不知道服务器代码中是否有任何内容说“我将只向一个客户端广播”。

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

最佳答案

你不能在同一个端口上绑定(bind) 2 个进程。不熟悉广播,但通常您有 2 个选择 - 在同一网络上的 2 台机器上运行 2 个进程,或者在不同的端口上运行客户端并让广播在多个端口上广播

在 2 台机器上运行 2 个进程时的命令行应该是这样的:

$ ./BroadcastSender 127.0.255.255 1337 hey &

当 127.0.255.255 是您的子网掩码时

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

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

关于c - 服务器仅向第一个客户端广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53250574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com