Я использую example of Microsoft (Visual Basic нетто 4,5) для отправки и получения Datas бросить гнездо, но этот блок всегда верно:EndReceive никогда никогда не заканчивает прием VB Net
Private Sub OnRecieve(ByVal ar As IAsyncResult)
Try
Dim state As StateObject = CType(ar.AsyncState, StateObject)
Dim client As Socket = state.workSocket
' Read data from the remote device.
Dim bytesRead As Integer = client.EndReceive(ar)
If bytesRead > 0 Then
' There might be more data, so store the data received so far.
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead))
' Se supone que vuelve por los datos que faltan, pero no lo hace (Creo)
client.BeginReceive(state.buffer, 0, state.BufferSize, 0, AddressOf OnRecieve, state)
Else
' All the data has arrived; put it in response.
If state.sb.Length > 1 Then
VariablesGlobales.response = state.sb.ToString()
End If
' Signal that all bytes have been received.
receiveDone.Set()
End If
Catch ex As Exception
'clientSocket.Close()
RaiseEvent FallaAlRecibirDatos(ex.Message, "Falla en endReive.")
End Try
End Sub
Но я пошлю и отправить , и отправить сообщение, короткое или большое, и оно никогда не вводится в предложение else. Вот мой исходный код:
Public Sub Conectar()
clientSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Dim ipEndPoint As IPEndPoint = New IPEndPoint(Me.ipAddress, VariablesGlobales.Puerto)
clientSocket.BeginConnect(ipEndPoint, New AsyncCallback(AddressOf OnConnect), clientSocket)
' Wait for connect.
connectDone.WaitOne()
EnviarDatosPersonales()
' Wait for send datas.
sendDone.WaitOne()
While True
AvtivarEscuchador()
receiveDone.WaitOne()
DescifrarMsg(VariablesGlobales.response)
End While
End Sub
я Получать сообщения, отправляемые сервером, и я могу видеть их в визуальные шаги студии к шагам, но я не знаю, почему он никогда не входит в другой, я означает, что он никогда не заканчивает получение данных.
Я читал the answer of Marc Gravell, но я предпочитаю пример кода, как решить это, я не знал, что делать.
Кроме того, я удалил «else», и он заполнил мой textBox множеством белых линий, подобно тому, как поступает бесконечная петля. Пожалуйста, помогите мне. Благодарю.
О К сожалению, здесь Escuchador Функция:
Private Sub AvtivarEscuchador()
' Borramos los datos de respuesta anterior
VariablesGlobales.response = ""
' Activamos el escuchador
Try
' Create the state object.
Dim state As New StateObject()
state.workSocket = Me.clientSocket
' Begin receiving the data from the remote device.
Me.clientSocket.BeginReceive(state.buffer, 0, state.BufferSize, 0, AddressOf OnRecieve, state)
Catch e As Exception
RaiseEvent FallaAlRecibirDatos("No se pudo activar el escuchador.", "Falla al intentar escuchar.")
End Try
End Sub
вы вызываются 'client.BeginReceive' хотя бы один раз? что такое начальное значение 'bytesRead'? – I4V
Я редактировал вопрос с большим количеством кода. – bluesky777
bluesky777, я до сих пор не вижу, что вы называете 'BeginReceive'. Как вы думаете, 'OnRecieve' вызывается, когда вы не вызываете' BeginRecv' – I4V