【问题标题】:UdpClient can act as server?udpClient 可以充当服务器吗?
【发布时间】:2023-04-09 00:08:01
【问题描述】:

我用了大约两周的时间尝试了很多不同的代码,但没有一个像我认为的那样有效。

我只需要在定义的端口上接收数据包并将该数据包应答到远程 IP 的源端口

I.E. 我正在侦听端口 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

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

【问题讨论】:

    标签: sockets vb.net-2010 udpclient


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 2015-05-13
      • 2017-05-18
      • 2016-05-02
      相关资源
      最近更新 更多