ファイルを転送するための非同期ソケット クライアントをコーディングしています (この Microsoft の記事に従って)。BeginReceive を使用すると、各パケットの最後に 1 つの Null 文字/chr(0) が追加されるため、転送が破損することに気付きました。この問題の原因は何ですか? 送信側ではないかと思ったのですが、SendFileでテストしたところ同じ結果でした。
Microsoft の記事では、バイトを ASCII 文字列に変換し、それを StringBuilder に追加します。オンザフライでバイトを保存したいので、ReceiveCallback を次のようにほとんど変更しませんでした。
Private Shared Sub ReceiveCallback(ByVal ar As IAsyncResult)
Dim state As StateObject = CType(ar.AsyncState, StateObject)
Dim client As Socket = state.workSocket
Dim bytesRead As Integer = client.EndReceive(ar)
If bytesRead > 0 Then
FileIO.FileSystem.WriteAllBytes(Application.StartupPath & "\test.exe", state.buffer, True)
client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, New AsyncCallback(AddressOf ReceiveCallback), state)
Else
receiveDone.Set()
End If
End Sub