UdpClient可以充当服务器吗?

时间:2014-05-23 13:09:22

标签: sockets vb.net-2010 udpclient

我尝试了大约两周的不同代码,但没有一个像我想象的那样有效。

我只需要在定义的端口上接收数据包并将该数据包应答到远程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

当它连接到远程主机时,似乎停止侦听任何其他远程主机。

1 个答案:

答案 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