vb6.0,关于winsock控件,udp广播如何穿透路由器

心中有程 2012-04-07 09:27:41
情况是这样的:我的局域网中有一台服务器和N台客户机,原来服务器和客户机都连接在电脑的lan口上,我写了一个服务器软件,自动广播服务器的ip地址,当客户机上运行客户端软件时,收到这个广播后客户端软件会做下一步的动作。
现在由于某种原因,需要将服务器连接到路由器的wan口上,导致客户机软件不能再收到服务器的广播,我的广播程序如下:

Dim 服务器ip As String

Private Sub Command1_Click()

With winsock1
.Close
.Protocol = sckUDPProtocol
.RemoteHost = "192.168.0.255"
.LocalPort = 7776
.RemotePort = 7777
.Bind
服务器ip = .Localip
End With

Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
系统消息.SendData "服务器ip" & 服务器ip
End Sub

我将 RemoteHost 属性设置为 "192.168.255.255"、"255.255.255.255"都不行,烦请各位高手给支个招,如何才能让lan口上的客户机收到wan口上的服务器广播,感谢各位。
...全文
628 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
心中有程 2012-05-10
  • 打赏
  • 举报
回复
看来问题是解决不了了,为了感谢诸位的参与,把分给诸位分一下吧,来者有份。
Tiger_Zhao 2012-04-11
  • 打赏
  • 举报
回复
网络上用qq的才占多少百分比?用广播纯属添乱。
A)服务器逐个发送
B)客户端定时查询
心中有程 2012-04-11
  • 打赏
  • 举报
回复
这里面也没有关于vb多播的代码啊?
Tiger_Zhao 2012-04-11
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120406/15/3f8d626f-da39-421a-94bb-cd1b4e611c2b.html
心中有程 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
网络上用qq的才占多少百分比?用广播纯属添乱。
A)服务器逐个发送
B)客户端定时查询
[/Quote]

多谢指教。不过我还想请教一个问题:用vb如何实现多播呢?比方说qq的群聊功能,我查了很多资料说可以把多个ip加入到一个组,然后向这个组发送消息就可以实现多播。但不知道用vb该如何写代码呢?
心中有程 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
1)你先确认服务器可以访问任意客户端。
2)必须用子网广播 192.168.255.255,直播 255.255.255.255 是不能跨路由的。
3)检查路由器设置,为防冲击波之类的病毒,子网广播可能会被禁止的。
[/Quote]

我看了一下路由器的设置界面,没有发现关于子网广播的设置选项啊,能否具体的指导一下,该设置哪一项呢。我的是腾达路由器
心中有程 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
路由器不一样的,需要具有“子网定向广播(subnet directed broadcast)”功能的才行
[/Quote]

这样啊。那我还想问一下,qq的新闻弹窗是如何发过来的呢?不是用广播吗?
Tiger_Zhao 2012-04-10
  • 打赏
  • 举报
回复
路由器不一样的,需要具有“子网定向广播(subnet directed broadcast)”功能的才行
Tiger_Zhao 2012-04-09
  • 打赏
  • 举报
回复
路由器的 WAN/LAN 两端必须是不同的网段,
首先,服务器接到 WAN口 后 ip 必须和原先不属于一个网段;
其次,路由器一般设置的是 LAN->WAN 的路由,要进行 WAN->LAN 的访问通常需要添加静态路由。
Google: 路由器 跨网段访问
心中有程 2012-04-09
  • 打赏
  • 举报
回复
求高手~~~~~
Tiger_Zhao 2012-04-09
  • 打赏
  • 举报
回复
1)你先确认服务器可以访问任意客户端。
2)必须用子网广播 192.168.255.255,直播 255.255.255.255 是不能跨路由的。
3)检查路由器设置,为防冲击波之类的病毒,子网广播可能会被禁止的。
心中有程 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
路由器的 WAN/LAN 两端必须是不同的网段,
首先,服务器接到 WAN口 后 ip 必须和原先不属于一个网段;
其次,路由器一般设置的是 LAN->WAN 的路由,要进行 WAN->LAN 的访问通常需要添加静态路由。
Google: 路由器 跨网段访问
[/Quote]
补充一下,我现在可以使用lan口电脑远程登录wan口的服务器,所以ip网段的问题已经不是问题。至于静态路由,不知道跟广播有什么关系?
心中有程 2012-04-08
  • 打赏
  • 举报
回复
高手在哪啊?
myjisgreat 2012-04-07
  • 打赏
  • 举报
回复
但是我也不是很懂,坐等高手出现
myjisgreat 2012-04-07
  • 打赏
  • 举报
回复
NAT穿越
心中有程 2012-04-07
  • 打赏
  • 举报
回复
没人回复啊?自个顶一下
心中有程 2012-04-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
也不会转个弯 真正广播不到 你不会按ip段一个一个去发送吗
[/Quote]
一个一个发固然可行,可是当客户机多的时候岂不是加重了服务器的负担?
startbin 2012-04-07
  • 打赏
  • 举报
回复
也不会转个弯 真正广播不到 你不会按ip段一个一个去发送吗
心中有程 2012-04-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
NAT穿越
[/Quote]

可否详细一点?
基于VB的远程开机程序,好像远程关机的见到比较多,远程开机见的并不多,一台电脑要想实现网上远程开机,其主板和网卡必须都支持远程唤醒功能,然后还得进入BIOS设置COMS,至于如何设置,不同的主板设置方法也可能不一样,请参考有关资料 设置好COMS后就可以用本程序发送远程开机命令了,如果想要广域网远程开机,那么除了设置COMS外,还得对路由器进行一定的设置。   '新建一个工程,在Form1上添加三个Text控件,三个标签控件,一个命令按钮和一个Winsock1控件,然后复制下面的代码到Form1   Dim myMAC(0 To 5) As Byte '欲唤醒的主机的MAC地址   Private Sub StrToMAC(ByVal myStrMAC As String) '将MAC地址的字符串形式转化为十六进制数值保存在数组myMAC里   Winsock1.SendData MagicPacket '发送魔术包(不管是在局域网还是在广域网,只要一台电脑检测到对应MAC的魔术包就会自动唤醒)   Winsock1.Protocol = sckUDPProtocol'使用UDP协议   Text1.Text = "010203ABCDEF" '欲唤醒的电脑的MAC地址,MAC地址的格式要求这样填(数值之间没有其它字符)   Text2.Text = "225.225.225.255" '广播地址(因为远程电脑已关机,没有IP地址,所以只能以广播形式找到要打开的电脑,广域网的话填路由器的IP)   Text3.Text = "0" '端口号,在局域网里的话就为0吧,广域网的话就看你的路由器开放哪个端口了!

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧