UDP ブロードキャスト メッセージ (255.255.255.255 またはサブネットのブロードキャスト アドレス 172.16.7.255/11) を送信することにより、メッセージを送信する関数 (appl が何をしているかをトレースするため) を持つ VB6 appl があります。関数は、アプリ内のさまざまな場所から呼び出されます。
同じポートでリッスンし、正常に動作すると思われるメッセージを表示する別のアプリがあります。
サブネット内の任意のホストで送信アプリとリスナー アプリを実行でき、すべて正常に動作しているようです。ただし、Windows 8 ボックスで送信アプリを実行すると、1 秒おきのメッセージしか表示されないことがわかります。私のメッセージにはたまたま番号が付けられていて、基本的には奇数番号のメッセージしか表示されません。
次の方法で、考えられる多くの問題を排除しようとしました。
- ネットワークの負荷は最小限であり、他の条件下ではデータの損失は見られません
- メッセージは非常に小さい (それぞれ 100 バイト未満)
- 送信側アプリから同じホストまたは別のホストでリスナーを実行すると、同じ動作が見られます。
- アプリは .exe または VB6 IDE で実行できます。IDE では、winsock.SendData 行をステップ オーバーできますが、1 秒ごとのメッセージが静かに蒸発していることがわかります。
- 送信後に
Sleep
and/orを実行しようとしましたDoEvents
- Winsock イベント SendComplete を使用しようとしましたが、これらは UDP に対して発生していないと思われます
- 同じ方法で多数の UDP ブロードキャストを単純に送信する別の小さな VB6 アプリを作成しました。この場合、すべてのメッセージがリスナーによって正しく送受信されます。
- (まだXPを実行している)他のマシンでアプリを実行しても問題なく動作します
- 毎秒のメッセージが別の場所に送られているのではないかと思いました。マシンには 1 つの NIC しかありません。
- 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
何がうまくいかないのか、または私ができるさらなるテストに関する提案。