【发布时间】:2012-09-12 10:40:24
【问题描述】:
我正在编写一个用于传输文件的异步套接字客户端 (following this Microsoft article),并注意到使用 BeginReceive 会破坏传输,因为它会在每个数据包的末尾添加一个 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
【问题讨论】:
标签: vb.net sockets null beginreceive