0
    Private Sub Receiving(ByVal iAr As IAsyncResult)
    Console.WriteLine("Receiving callback started" + vbNewLine)
    Try
        SyncLock client.GetStream
            Try
                client.GetStream.EndRead(iAr)
            Catch
                Console.WriteLine("exciting")
                Exit Sub
            End Try
        End SyncLock
    Catch ex As Exception
        Console.WriteLine("exciting")
        Exit Sub
    End Try

    Dim sReader As StreamReader
    Dim nChar As Integer
    Dim StrBuffer(4096) As Char

    SyncLock client.GetStream
        sReader = New StreamReader(client.GetStream)

        Try
            nChar = sReader.Read(StrBuffer, 0, bByte.Length)
        Catch ex As Exception
            Console.WriteLine(ex)
        End Try


        Console.WriteLine(client.GetStream.CanRead)
        newStr = New String(StrBuffer, 0, nChar)

        Console.WriteLine(newStr)

        Console.WriteLine("Receiving callback callbacked" + vbNewLine)

        client.GetStream.BeginRead(bByte, 0, 4096, AddressOf Receiving, Nothing)
    End SyncLock
End Sub

これは私が持っているコードです。おそらく1時間デバッグしてきましたが、問題が見つからないため、解決策が見つかりません

何が起こるべきかは、受信メソッドがバイトの配列を取得することです。デバッグでは、配列は空ではありません。チェックしましたが、問題があると思われる場所は、読み取った行にあります

nChar = sReader.Read(StrBuffer, 0, bByte.Length)

この行では、デバッグは何も停止しません。行を削除すると関数は続行しますが、問題はこの行にあり、何が原因なのか本当にわかりません。

さらに情報が必要な場合は、私に尋ねてください。私はこれに非常に混乱しています。

4

1 に答える 1

1

EndRead() が実行されると、受信したデータは既にバイト配列 "bByte" 内にあります。EndRead() からの戻り値は、読み取られたバイト数になります。StreamReader を使用して下を再度読み込もうとしていますが、その時点より前に既にバッファーにデータを取得しています。

データをどのようにエンコードしたかはわかりませんが、通常は受信側で次のようなことを行います。

Private Sub Receiving(ByVal iAr As IAsyncResult)
    Console.WriteLine("Receiving callback started" + vbNewLine)
    Dim nChar As Integer = client.GetStream.EndRead(iAr)
    Dim newStr As String = Encoding.ASCII.GetString(bByte, 0, nChar)
    Console.WriteLine(newStr)
    Console.WriteLine("Receiving callback callbacked" + vbNewLine)
    client.GetStream.BeginRead(bByte, 0, bByte.Length, New AsyncCallback(AddressOf Receiving), Nothing)
End Sub
于 2013-11-07T05:34:27.670 に答える