问一个 关于IdUDPClient广播消息的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 外来天客
  • 开始时间 开始时间

外来天客

Unregistered / Unconfirmed
GUEST, unregistred user!
比如: 我的IP:192.168.139.138 , 然后用 IdUDPClient.Broadcast 方法广播一个消息. 在本网段里面的机子可以收到这个消息, 而另一个网段: 192.168.135.* 却没有收到这消息.. 这正常吗? 有什么方法可以广播整个局局域网??

但我用 IdUDPClient1.Send('192.168.135.*',aPort,Msg); 又能接收到.
 
學習學習.都不太了解.
 
试试这个
IdUDPClient1.Send('192.168.255.255',aPort,Msg);
 
to: ufo!
IdUDPClient1.Send('192.168.255.255',aPort,Msg);

使用上面这个.. 在本网段里面的机子都没收到这个消息了
 
你子网掩码是什么 要设置为 255.255.255.0
 
是这个: 255.255.255.0 我使用的是校园网. 单独的发送却可以, 但广播的时候就收不到了.不知道为什么呢.
 
在indy的源码内广播地址是这样的:
procedure TIdUDPBase.Broadcast(const AData: string; const APort: integer);
begin
SetBroadcastFlag(True);
Send('255.255.255.255', APort, AData);
BroadcastEnabledChanged;
end;
 
还有,如果你不同的网段是用vlan或者路由器隔离的,那么路由器会丢弃广播包的。
 
如果你不同的网段是用vlan或者路由器隔离的,那么路由器会丢弃广播包的。
我想应该是这个原因了.

难道要我一个一个网段、一个一个IP的发送消息???
 
还有,普通广播包是不能跨网段的,如果你使用的是三层交换机,可以使用其组播功能。
另外,如果这两个网段是用路由器隔离的,可以开启路由器的广播包定向转发。

或者用这个简单的方法试试,发两次:
IdUDPClient1.Send('192.168.135.255',aPort,Msg);
IdUDPClient1.Send('192.168.139.255',aPort,Msg);
 
IdUDPClient1.Send('192.168.135.255',aPort,Msg); //接收不到
IdUDPClient1.Send('192.168.139.255',aPort,Msg); //通过,本网段

开启路由器的广播包定向转发. 这个恐怕我们学生没有这个权限. 网络管理员也不会答应的.
 
那你在网卡上再绑定一个ip。
 
哎..这个就更有点困难了. 我们学生上网都是通过 DigitalChinaSupplicant 3.4 (神州出的一个BT的网络管理系统) 连接上网的. 直接邦定IP和MAC.
 
既然这样,那就本网段的广播,其他网段的一个一个发就是了,一个网段也就253台机器(0,255不用发,1一般用于网关),用udp循环一遍很快的。
如果程序是你自己开发的,还可以这样,你首先向外网段发特定数据包,并要求对方机器收到后返回消息并广播,当有一台外网段的机器收到数据包后你就停发,然后那台机器会广播。这样,你实际上也只发一次数据包就够了。
 
感谢 ufo!大哥的热心帮助.
 
后退
顶部