我有一个VB6 appl,其中有一个功能,可以通过发送UDP广播消息(发送到255.255.255.255或子网的广播地址172.16.7.255/11)来发送消息(以跟踪appl正在做什么) 。该函数是从应用程序中的各个位置调用的。
我有另一个应用程序在同一端口上监听并显示我认为工作正常的消息。
我可以在子网中的任何主机上运行发送应用程序和监听器应用程序,并且一切似乎都工作正常。然而,当我在 Windows 8 盒子上运行发送应用程序时,我发现我只能看到每隔一条消息。我的消息碰巧是编号的,基本上我只看到奇数编号的消息。
我尝试通过以下方式消除一些可能的问题:
- 网络负载极小,在其他条件下我没有看到任何数据丢失
- 消息非常小(每条消息不到 100 字节)
- 当我在同一主机或发送应用程序的另一个主机上运行监听器时,我会看到相同的行为。
- 我可以将应用程序作为 .exe 运行,也可以在 VB6 IDE 中运行。在 IDE 中,我可以跨过 winsock.SendData 行,但我仍然看到第二条消息悄悄消失
- 我尝试在发送后执行
Sleep
和/或DoEvents
- 我尝试使用 Winsock 事件 SendComplete,但我怀疑这些事件不是针对 UDP 引发的
- 我编写了另一个小型 VB6 应用程序,它只是以相同的方式发送多个 UDP 广播 - 在这种情况下,监听器可以正确发送和接收所有消息。
- 在其他计算机(仍在运行 XP 的计算机)上运行应用程序可以正常工作
- 我想知道第二条消息是否会发送到其他地方。该机器只有一个网卡。
- 我已确认使用 WireShark 的监听器应用程序运行正常。
相关代码为:
Private WithEvents sock As Winsock
Public Sub Init()
Set sock = new Winsock
End Sub
Public Sub Send(msg As String)
sock.RemoteHost = "255.255.255.255"
sock.RemotePort = 17907
sock.SendData msg
End Sub
关于可能出现问题的任何建议,或者我可以做的进一步测试。
最佳答案
我在VBA中遇到了类似的问题,使用access 2010。对我来说唯一解决这个问题的是这个(我知道它没有任何意义)。重复此行两次:
Sock.RemoteHost = DestinationIP ( for example: "192.168.0.10")
Sock.RemoteHost = DestinationIP ( same value as in the above line)
它就像魔法一样:
乔
关于windows-8 - VB6应用程序通过winsock发送UDP广播消息 - 仅每隔一条消息发送一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16852045/