2014-01-06 27 views
1

如果你能帮助我解决我的问题,请点击这里。一方面,我有连接到路由器172.27.13.1的WAN接口的IP 172.27.13.2服务器...然后在我的路由器192.168.1.1的无线局域网上,我连接了几个客户端。现在我将用C编写代码,其中客户端向服务器请求一些UDP流,然后服务器向客户端广播流,如果某些数据包丢失,客户端必须向服务器发送NACK。我的问题是: 由于服务器和客户端位于不同的子网上,我如何从服务器进行广播? 以及客户端如何将请求和NACK发送到服务器,因为它们位于不同的子网中? 这些问题可以通过路由器配置或C代码解决吗?在不同的子网上广播

感谢您的帮助

回答

1

您无法广播到不同的子网。路由器通常不会将广播数据包转发到不同的子网,除非您有一个可以正确配置的非常特殊的路由器(例如Cisco ...)。但是,您可以使用多播来完成这样的任务。下面是a C example

而且检查:UDP broadcast packets across subnets

注意:一些包括在C例如缺失,但他们很容易找到

+0

但是在客户端我只有一个LAN子网192.168 .1.1/24所以为什么我不能从192.168.1.255上的服务器发送广播数据包....问题是客户端如何在172.27.13.2上响应服务器?这个响应是单播的。或者我不太了解这个概念。 谢谢 – user3119422

+0

@ user3119422广播仅适用于一个子网,因此您无法从192.168.1.0/24发送广播,并且它们以172.27.13.2结束(您也可以以相反方式进行)单播不成问题,只要你有一个正确的路由器设置。 – nos

+2

由于安全原因,使用其他接口广播地址的广播几乎处于禁用状态。想象一下,这是被允许的,并且结果是在不知道其细节的情况下针对远程结构的高效DoS。通常,一些代理应该将您的数据包重新传输到本地子网。如果您在企业级需要它,请研究多播和多播路由。 – Netch

1

由于两个服务器&用户在不同的子网。至于路由器DONOT前进广播。但我们通过修改路由器配置来解决问题。 如果你有cisco路由器&用户在cisco交换机上连接,你可以在vlan上使用ip helper address命令。你可以在路由器上允许udp数据包ACL

+0

嗨,我没有思科路由器,我读到他们可以做到这一点......所以我决定在C中使用多播套接字来解决我的问题。谢谢 – user3119422