Vb.net Udpclient有时抛出异常

Vb.net Udpclient有时抛出异常,vb.net,exception,udpclient,Vb.net,Exception,Udpclient,我目前正在通过以太网开发UDP通信PC ARM LM3S6965灯具。在PC上有一个模拟UDP服务器/客户端的VB.net应用程序 消息从Vb.net应用程序广播到基于ARM LM3S6965的设备,作为回报,响应从ARM设备发送到Vb.net应用程序 但有时receive UdpClient会引发套接字异常,即每个套接字地址协议/网络地址/端口通常只允许使用一次 引发异常的行是 udpReceivingClient = New UdpClient(mnPort) 完整的VB.net代码如下

我目前正在通过以太网开发UDP通信PC ARM LM3S6965灯具。在PC上有一个模拟UDP服务器/客户端的VB.net应用程序

消息从Vb.net应用程序广播到基于ARM LM3S6965的设备,作为回报,响应从ARM设备发送到Vb.net应用程序

但有时receive UdpClient会引发套接字异常,即每个套接字地址协议/网络地址/端口通常只允许使用一次

引发异常的行是

udpReceivingClient = New UdpClient(mnPort)
完整的VB.net代码如下

Module mod_Search_UDP
Public mnPort As Int32 = 3040                                   'Port number to send/recieve data on
'Public Const msBroadcastAddress As String = "255.255.255.255"   'Sends data to all LOCAL listening clients, to send data over WAN you'll need to enter a public (external) IP address of the other client
'Dim endPoint As IPEndPoint = New IPEndPoint(msBroadcastAddress, mnPort)
Public udpReceivingClient As UdpClient                          'Client for handling incoming data
Public udpSendingClient As UdpClient                            'Client for sending data
Public receivingThread As Thread                                'Create a separate thread to listen for incoming data, helps to prevent the form from freezing up
Public mbiClosing As Boolean = False                            'Used to close clients if form is closing
Public mbiCloseRxClient As Boolean = False

Public Sub InitializeSender()
    Dim soc As Socket
    Dim lsPort As String
    Dim lnPort As Int32 = 3040
    Const lsBroadcastAdd As String = "255.255.255.255"
    'Dim endPoint As IPEndPoint = New IPEndPoint(msBroadcastAddress, mnPort)
    'udpSendingClient = New UdpClient(endPoint)
    udpSendingClient = New UdpClient(lsBroadcastAdd, lnPort)

    udpSendingClient.EnableBroadcast = True

    soc = udpSendingClient.Client
    lsPort = (CType(soc.LocalEndPoint, IPEndPoint).Port.ToString())
    mnPort = Convert.ToInt32(lsPort)
End Sub

Public Sub InitializeReceiver()
    'Create UdpClient class and bind it to the local port number provided
    'Try
    udpReceivingClient = New UdpClient(mnPort)
    'udpReceivingClient.EnableBroadcast = True
    mbiCloseRxClient = True
    'Catch ex As Exception
    '    MsgBox(ex.ToString)
    'End Try


    Dim start As ThreadStart = New ThreadStart(AddressOf MT_Receiver)
    receivingThread = New Thread(start)
    receivingThread.IsBackground = True
    receivingThread.Start()
End Sub

Public Sub MT_Receiver()

    Dim endPoint As IPEndPoint = New IPEndPoint(IPAddress.Any, mnPort)    'Listen for incoming data from any IP address on the specified port 
    Dim lbData() As Byte                                                'Buffer for storing incoming bytes
    Dim llRet As UInt16
    'udpListen.Poll(1000, Net.Sockets.SelectMode.SelectRead)
    While (True)                                                        'Setup an infinite loop
        If mbiClosing = True Then                                       'Exit sub if form is closing
            Exit Sub
        End If
        llRet = udpReceivingClient.Available
        If llRet > 0 Then
            lbData = udpReceivingClient.Receive(endPoint)                   'Receive incoming bytes
            'If udpListen.Available Then
            '    udpListen.Receive(lbData, 256, Net.Sockets.SocketFlags.None)
            'End If
            'If lbData Is Nothing Then
            'Else
            frmSearchUDP.MT_Validate_Msg(lbData)
        End If
    End While
End Sub
Public Sub MT_Send_UDP(ByVal lbTxBuffer() As Byte)
    InitializeSender()
    If mbiCloseRxClient = True Then
        receivingThread.Abort()
        udpReceivingClient.Client.Dispose()
        udpReceivingClient.Close()

    End If
    Try
        udpSendingClient.Send(lbTxBuffer, lbTxBuffer.Length)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
    udpSendingClient.Client.Dispose()
    udpSendingClient.Close()
    InitializeReceiver()
    'Try
    '    udpReceivingClient.BeginReceive(AddressOf MT_RX_Callback, Nothing)
    'Catch ex As Exception
    '    MsgBox(ex.ToString)
    'End Try
End Sub
End Module

代码中有什么错误?如何使用同一端口进行接收和传输?

那些放弃投票的人请说明原因。一旦与服务器连接,您就有了一个流对象来接收和发送数据。我不明白为什么您需要2个UDP客户端来完成此操作。也许你想解释一下我想不出的特殊用例?我是vb.net新手,我参考了这段代码。你是说我可以自己广播和接收来自一个客户端的信息吗?我不完全理解你想要实现什么,因为你在帖子中没有说明任何与此相关的内容。我目前正在通过以太网开发UDP通信PC ARM LM3S6965灯具。在PC上有一个模拟UDP服务器/客户端的VB.net应用程序。该消息将从VB.Net应用程序中广播,并从连接的n个ARM设备发送响应。