首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用System.Net.Sockets SendFile后检索数据

使用System.Net.Sockets SendFile后检索数据
EN

Stack Overflow用户
提问于 2012-06-08 23:07:06
回答 1查看 1.8K关注 0票数 1

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

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

我计算出,通过在检索下一块数据之间设置一个小的睡眠延迟,可以使传输100%稳定。

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

代码语言:javascript
复制
While newSocket.Available > 0
    Threading.Thread.Sleep(100)
    newSocket.ReceiveFrom(data, Remote)
End While

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-08 23:16:51

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

如果客户端为它发送的每个文件建立到服务器的新连接,您只需将其更改为如下所示:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10951425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档