我尝试了大约两周的不同代码,但没有一个像我想象的那样有效。
我只需要在定义的端口上接收数据包并将该数据包应答到远程IP的原始端口
即。 我正在侦听端口8090并从远程端口6508(源端口)接收数据包我需要将响应从8090(本地传出端口)传送到6508(远程传入端口)而不停止侦听来自另一个远程主机的另一个传入数据
问题在于,使用UDPClient,我无法使用我用来听取答案的相同端口。
我得到的最佳方法是只接收一个远程主机(第一个)的答案。
所以我想知道是否可以使用相同的UDPClient来回答来自不同远程主机的接收。
我感到有些沮丧。
你能指导我吗?
新信息 我运行了一些测试,接收线程工作正常,从任何远程主机接收数据,直到发送以下代码的答案。
Private Sub UdpSend(ByVal txtMessage As String)
Dim pRet As Integer
GLOIP = IPAddress.Parse(IpRemotaLbl.Text)
GLOINTPORT = PuertoEscuchaLbl.Text
MyUdpClient.Connect(GLOIP, DstPort) 'Can be here the error?
bytCommand = Encoding.ASCII.GetBytes(txtMessage)
pRet = MyUdpClient.Send(bytCommand, bytCommand.Length)
PrintLog("No of bytes send " & pRet)
End Sub
当它连接到远程主机时,似乎停止侦听任何其他远程主机。
答案 0 :(得分:1)
感谢@LokiSinclair
UDP SocketException - Only one usage of each socket address is normally permitted
Private Sub UdpSend(ByVal txtMessage As String)
Dim pRet As Integer
GLOIP = IPAddress.Parse(IpRemotaLbl.Text)
Using UdpSender As New System.Net.Sockets.UdpClient()
Dim RemoteEndPoint = New System.Net.IPEndPoint(0, 8090)
UdpSender.ExclusiveAddressUse = False
UdpSender.Client.SetSocketOption(Net.Sockets.SocketOptionLevel.Socket, Net.Sockets.SocketOptionName.ReuseAddress, True)
UdpSender.Client.Bind(RemoteEndPoint)
UdpSender.Connect(GLOIP, DstPort) 'GLOIP Null?
bytCommand = Encoding.ASCII.GetBytes(txtMessage)
pRet = UdpSender.Send(bytCommand, bytCommand.Length)
End Using
PrintLog("No of bytes send " & pRet)
End Sub