同じコンピューター上で一緒に動作する非常に単純なUDPクライアント/サーバーペアを作成しようとしていますが(今のところ)、パケットが配信されていません。以下のコードは、100%完全なVB.NETコンソールアプリケーションです。エラーをスローせずに実行されますが、mListener.Receiveコマンドが戻ることはありません。
質問1:パケットを受信しないのはなぜですか?
質問2:クライアントにIPAddress.Anyをエンドポイントとして使用させることができないのはなぜですか?New IPEndPoint(IPAddress.Any、10123)に接続しようとすると、「要求されたアドレスはそのコンテキスト0.0.0.0:10123では無効です」という例外が発生します。
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Module Module1
Sub Main()
Dim ep As New IPEndPoint(IPAddress.Loopback, 10123)
Dim s As New Server(ep)
Dim c As New Client(ep)
Do
Console.WriteLine("Waiting in main loop...")
Thread.Sleep(5000)
Loop
End Sub
End Module
Public Class Server
Private mBroadcaster As UdpClient
Public Sub New(ep As IPEndPoint)
mBroadcaster = New UdpClient
mBroadcaster.ExclusiveAddressUse = False
mBroadcaster.Connect(ep)
Dim sender As New Thread(AddressOf SendLoop)
sender.Start()
End Sub
Private Sub SendLoop()
Do
Dim msg As Byte() = Text.ASCIIEncoding.ASCII.GetBytes("Hello world")
Console.WriteLine("Sending...")
mBroadcaster.Send(msg, msg.Length)
Thread.Sleep(1000)
Loop
End Sub
End Class
Public Class Client
Private mListener As UdpClient
Public Sub New(ep As IPEndPoint)
mListener = New UdpClient
mListener.ExclusiveAddressUse = False
mListener.Connect(ep) 'Why can't I use IPAddress.Any here?
Dim poller As New Thread(AddressOf PollLoop)
poller.Start()
End Sub
Private Sub PollLoop()
Do
Dim ep As IPEndPoint = Nothing
Console.WriteLine(" Receiver listening...")
Dim incomingbytes As Byte() = mListener.Receive(ep)
Dim msg As String = Text.ASCIIEncoding.ASCII.GetString(incomingbytes)
Console.WriteLine(" Received: " & msg & " from " & ep.Address.ToString & ":" & ep.Port)
Loop
End Sub
End Class