我正在用VB.NET编写一个简单的TCP客户机/服务器来传输各种大小的文件。我决定使用System.Net.Sockets的命令SendFile通过套接字传输字节。
在接收端,我检索字节的代码运行得相当好,但偶尔会随机停止传输。
我计算出,通过在检索下一块数据之间设置一个小的睡眠延迟,可以使传输100%稳定。
我检索数据(直到没有可用的数据)的代码被简化为:
While newSocket.Available > 0
Threading.Thread.Sleep(100)
newSocket.ReceiveFrom(data, Remote)
End While我真的讨厌使用睡眠延迟,并且认为必须有一个适当的方法/函数来从SendFile检索数据?
发布于 2012-06-08 23:16:51
Socket.Available返回到目前为止已接收但尚未读取的字节总数。因此,如果读取数据的速度快于传入数据的速度(这在速度较慢的网络上是很有可能的),那么即使客户端仍在发送数据,也不会有更多的数据需要读取。
如果客户端为它发送的每个文件建立到服务器的新连接,您只需将其更改为如下所示:
While newSocket.Connected
If newSocket.Available > 0 Then
newSocket.ReceiveFrom(data, Remote)
End If
End While但是,我建议使用异步调用,例如BeginReceive。然后,一旦有数据需要处理,你的委托就会被调用,而不是在一个恒定的循环中等待。有关示例,请参阅此链接:
http://msdn.microsoft.com/en-us/library/dxkwh6zw.aspx
https://stackoverflow.com/questions/10951425
复制相似问题