0

我有通过 TCP/IP 连接到 4 个不同设备(称重器和 3 个条形码扫描仪)的软件。大约每天一到两次,我收到一个导致软件崩溃的错误:

System.ArgumentException:IAsyncResult 对象未从此类的相应异步方法返回。参数名称:asyncResult at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)

我真的不明白为什么,我无法弄清楚。这里是连接设备的代码

client = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        port = RemotePort
        ipHostInfo = Dns.Resolve(RemoteHostName)
        ipAddress = ipHostInfo.AddressList(0)
        Dim remoteEP As New IPEndPoint(ipAddress, port)
        client.Connect(remoteEP)
        If client.Connected Then
            Dim state As New StateObject
            state.workSocket = client
            currentAsyncResult = client.BeginReceive(state.buffer, 0, state.BufferSize, 0, AddressOf sockDataArrival, state)
            RaiseEvent onConnect()
        End If

StateObject 类:

Public Class StateObject
   Public workSocket As Socket = Nothing
   Public BufferSize As Integer = 256
   Public buffer(BufferSize) As Byte
   Public sb As New StringBuilder()
End Class

和 dataArrival 事件:

 Private Sub sockDataArrival(ByVal ar As IAsyncResult)
    Dim state As StateObject = CType(ar.AsyncState, StateObject)
    Dim client As Socket = state.workSocket
    Dim bytesRead As Integer

    If ar IsNot currentAsyncResult Then
        Exit Sub
    End If

    Try
        bytesRead = client.EndReceive(ar)
    Catch
        Exit Sub
    End Try

    Try
        Dim Data() As Byte = state.buffer
        If bytesRead = 0 Then
            client.Shutdown(SocketShutdown.Both)
            client.Close()
            RaiseEvent onDisconnect()
            Exit Sub
        End If
        ReDim state.buffer(state.BufferSize)

        currentAsyncResult = client.BeginReceive(state.buffer, 0, state.BufferSize, 0, New AsyncCallback(AddressOf sockDataArrival), state)
        RaiseEvent onDataArrival(Data, bytesRead)
    Catch
        RaiseEvent onError(Err.Description)
        Exit Sub
    End Try
End Sub

我在这里做错了什么吗?我该如何解决这个错误?非常感谢您的时间和帮助

4

0 回答 0