[已解决]如何实现UDP广播?
本帖最后由 hlzxcjx 于 2011-12-24 20:08 编辑论坛里有局域网内客户端自动连接服务端的例子,但好像效率不高。如果IP地址改变或某两台机子正在信时会影响IP地址搜寻。如果要定时搜寻,一个IP一个IP地去PING,显然费时。而UDP广播好像可以解决此问题。UDP广播,不是一个IP一个IP地去播吧?
引用:UDP广播就是建立于UDP协议上的数据传输,当网络中的某一台机向交换机或路由发送一个广播数据时,交换机或路由则会帮我们将此广播数据发送到其节点下的所有接收者.交换机或路由在此时就有点类似于"大喇叭".只要我们向"大喇叭"喊一句话(发送一个消息),它就会向所有"听众"传送过去(嗯,聊天室就是如此).
AU3如何实现UDP广播? UDP不是一个一个是对你所在统一网络的所有IP进行广播,这个操作不要重复,否则会导致网络瘫痪 回复 2# sgj584520
具体如何操作? 大致象这个样子就可以了:
客户端的代码:
client.au3
UDPStartup()
$socket = UDPOpen("192.168.1.255", 65532)
If @error Then Exit
$n=0
While true
Sleep(2000)
$n += 1
$status = UDPSend($socket, "Message #" & $n)
If $status = 0 then
MsgBox(0, "ERROR", "Error while sending UDP message: " & @error)
Exit
EndIf
WEnd
Func OnAutoItExit()
UDPCloseSocket($socket)
UDPShutdown()
EndFunc
服务端的代码:
(这里不是一般意义的服务端,只是接受消息而已)
Server.au3
UDPStartup()
$socket = UDPBind(@IPAddress1, 65532)
If @error Then Exit
While true
$data = UDPRecv($socket, 50)
If $data <> "" Then
MsgBox(0, "UDP DATA", $data, 1)
EndIf
sleep(100)
WEnd
Func OnAutoItExit()
UDPCloseSocket($socket)
UDPShutdown()
EndFunc
我没有局域网测试环境,只是在单机上是成功的,应该没有问题 回复 4# happytc
谢谢!关键是这句吧:
$socket = UDPOpen("192.168.1.255", 65532)
“255”这个地址是不是?
反过来,用服务器作UDP广播应该也可以吧?
还有一个问题,象2楼所说的,“这个操作不要重复,否则会导致网络瘫痪”,是不是说只能广播一次? 回复 5# hlzxcjx
没有什么‘反过来’,这里的所谓客户端和服务端,只是一个负责发送,一个负责接受而已
看来我取这个名误导你了。也就是每个机子上都要运行这两个程序。
“这个操作不要重复,否则会导致网络瘫痪”,是不是说只能广播一次?
谁说的?现在的交换机都有防广播阻塞的能力,不用你担心 回复 6# happytc
每台电脑都要运行?一部分电脑只需接收消息的是不需要发送的那个运行吧? 测试中,等到没有问题后再结贴。 好像没问题! 很简单,学到了!
{:face (427):}
页:
[1]