Вот код на стороне отправки моих сокетов:
Private Sub Send(ByRef Buffer() As Byte)
Dim obj_StateObject As New StateObject
obj_StateObject.WorkSocket = m_tmpSocket
m_tmpSocket.BeginSend(Buffer, 0, Buffer.Length, SocketFlags.None, New AsyncCallback(AddressOf OnClientSendComplete), obj_StateObject)
End Sub
Private Sub OnClientSendComplete(ByVal ar As IAsyncResult)
Dim obj_SocketState As StateObject = CType(ar.AsyncState, StateObject)
Dim obj_Socket As Socket = obj_SocketState.WorkSocket
End Sub
Вот код получения:
Private Sub OnServerDataArrival(ByVal ar As IAsyncResult)
Dim obj_SocketState As StateObject = CType(ar.AsyncState, StateObject)
Dim obj_Socket As Socket = obj_SocketState.WorkSocket
Dim BytesRead As Integer = obj_Socket.EndReceive(ar)
If (BytesRead > 0) Then
Dim TempLength As Integer = BitConverter.ToInt32(obj_SocketState.Buffer, 0) - 4
Dim TempBuffer(TempLength - 1) As Byte
Array.Copy(obj_SocketState.Buffer, 4, TempBuffer, 0, TempLength)
RaiseEvent ServerDataArrival(TMP_ID, TempBuffer)
End If
obj_Socket.BeginReceive(obj_SocketState.Buffer, 0, obj_SocketState.BufferSize, 0, New AsyncCallback(AddressOf OnServerDataArrival), obj_SocketState)
End Sub
Я могу нормально отправлять и получать данные. Например, я могу послать 10-байтовый буфер одним нажатием кнопки, и проблем нет.
Однако, если я установлю эту кнопку для вызова функции, которая будет циклически отправлять 10-байтовый буфер 10 раз, я не получу в среднем около 8 буферов.
Что вызывает это? Код отправки выполняется 10 раз, но функция OnServerDataArrival выполняется только 2 раза.