-1

Microsoft (Visual Basic net 4.5)の例を使用して、ソケットをスローしてデータを送受信していますが、このブロックは常に true です。

    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

サーバーが送信するメッセージを受け取ります。Visual Studio のステップからステップへとそれらを見ることができますが、なぜそれが他のものに入らないのか、つまり、データの受信が完了しないのかわかりません。

Marc Gravell の回答を読みましたが、これを解決する方法のコード例を好むので、何をすべきかわかりませんでした。

さらに、「else」を削除すると、多くの受信の無限ループのように、textBox が多くの白い線でいっぱいになります。私を助けてください。ありがとう。

申し訳ありませんが、エスカドール関数は次のとおりです。

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
4

1 に答える 1