首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2路udp广播问题,borland turbo C++

2路udp广播问题,borland turbo C++
EN

Stack Overflow用户
提问于 2011-07-27 14:20:20
回答 1查看 598关注 0票数 0

我正在尝试在两台计算机上做一个双向广播系统。这是我第一次用c++做网络编程。假设我有计算机A和计算机B,每个计算机声明2个套接字,每台计算机上的套接字sd和sd1,以及每台计算机上的客户端和服务器声明。在计算机A上,计算机A上的套接字sd绑定到计算机A上的客户端IP 192.168.2.100:50000,然后它使用以下命令从广播计算机B接收信息:

代码语言:javascript
复制
recvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)

在计算机B上,使用以下命令将套接字sd设置为广播:

代码语言:javascript
复制
setsockopt(sd, SOL_SOCKET, SO_BROADCAST, (char *)&broadcastpermission, sizeof(struct sockaddr_in))

但是由于广播的使用,sd没有被绑定。然后,计算机B使用以下命令向计算机A广播信息:

代码语言:javascript
复制
sendto(sd, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))

其中,计算机B上声明的服务器的IP为192.168.2.100:50000 (与计算机A上的客户端IP相同,以便广播到该IP)。

当计算机B广播到计算机A时,上述方法工作得很好。但是,当我尝试反向执行相同的操作时,计算机A广播到计算机B,它不起作用。在计算机A上,使用以下命令声明套接字sd1并将其设置为广播:

代码语言:javascript
复制
setsockopt(sd1, SOL_SOCKET, SO_BROADCAST, (char *)&broadcastpermission, sizeof(struct sockaddr_in))

并且sd1未绑定,并且计算机A使用以下命令向计算机B广播:

代码语言:javascript
复制
sendto(sd1, (char *)send_buffer, 100, 0, (struct sockaddr *)&server, (int)sizeof(struct sockaddr_in))

其中,服务器声明为IP 192.168.2.2:40000 (它是计算机B的客户端IP地址,以便在那里广播)。在计算机B上,声明套接字sd1并将其绑定到客户端和IP 192.168.2.2:40000处自动获得的IP。计算机B使用以下命令接收广播:

代码语言:javascript
复制
recvfrom(sd, (char *)received_buffer, 100, 0, NULL, 0)

我为这个冗长的故事道歉,但我需要尽可能地说清楚。谁能说出计算机B不能从计算机A接收广播的可能性吗?

EN

回答 1

Stack Overflow用户

发布于 2011-07-27 14:39:47

似乎你所描述的是一种沟通方式有效,而另一种方式无效。这通常与代码中的问题无关,而是与网络的配置有关,最常见的是防火墙。

使用嗅探器(如Wireshark)验证计算机B是否收到来自计算机A的广播UDP数据报。如果不是,请验证计算机A发送的UDP数据报是否正确。如果A正在发送但B没有接收,则存在网络问题(路由器、防火墙等)。如果B正在接收,但您的应用程序没有,请验证端口号是否正确。您可以在计算机B上使用netstat (带-a -n)来查看是否在正确的端口上打开了UDP。

如果所有这些都不能让您更接近,请尝试在两台计算机上运行完全相同的程序-这意味着不要交换sdsd1角色。相反,在两台计算机上运行相同的程序(如果可能,还要运行相同的二进制文件),使用嗅探器验证数据报是否正确接收。然后,您可以查看程序是否可以相互接收。如果是这种情况,那么程序B代码中可能存在一些疏忽,导致它发生故障。

最后,通过从另一台计算机pinging每台计算机,使用ping验证基本的双向通信(请注意,ping不能确认有效的双向路径-防火墙通常会阻止传入的回应请求,但不会阻止应答)。然后使用常规(非广播) UDP套接字验证UDP通信。可能允许单播,但不允许广播。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6840155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档