gpt4 book ai didi

vb.net - 使用 System.Net.Sockets SendFile 后检索数据

转载 作者:行者123 更新时间:2023-12-03 12:06:01 25 4
gpt4 key购买 nike

我正在 VB.NET 中编写一个简单的 TCP 客户端/服务器来传输各种大小的文件。我决定使用 System.Net.Sockets 的命令 SendFile 通过套接字传输字节。

在接收端,我检索字节的代码运行良好,但偶尔传输会随机停止。

我发现通过在检索下一个数据 block 之间设置一个小的 sleep 延迟可以使传输 100% 稳定。

我检索数据的代码(直到没有可用数据)被简化为:

While newSocket.Available > 0
Threading.Thread.Sleep(100)
newSocket.ReceiveFrom(data, Remote)
End While

我真的很讨厌使用 sleep 延迟,并且认为必须有适当的方法/函数来从 SendFile 检索数据?

最佳答案

Socket.Available 返回到目前为止已接收但尚未读取的字节总数。因此,如果您读取数据的速度快于数据的传入速度(这在慢速网络上很有可能),即使客户端仍在发送数据中,也不会再读取更多数据。

如果客户端为它发送的每个文件都与服务器建立新连接,您可以简单地将其更改为如下内容:

While newSocket.Connected
If newSocket.Available > 0 Then
newSocket.ReceiveFrom(data, Remote)
End If
End While

但是,我建议改用异步调用,例如 BeginReceive。然后,只要有要处理的数据,您的委托(delegate)就会被调用,而不是在一个恒定的循环中等待。有关示例,请参见此链接:

http://msdn.microsoft.com/en-us/library/dxkwh6zw.aspx

关于vb.net - 使用 System.Net.Sockets SendFile 后检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10951425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com