我有通过 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
我在这里做错了什么吗?我该如何解决这个错误?非常感谢您的时间和帮助