Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用System.Net.Sockets SendFile后检索数据_Vb.net_Sockets_Sendfile - Fatal编程技术网

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

Vb.net 使用System.Net.Sockets SendFile后检索数据,vb.net,sockets,sendfile,Vb.net,Sockets,Sendfile,我正在VB.NET中编写一个简单的TCP客户机/服务器,以传输各种大小的文件。我决定使用System.Net.Sockets的命令SendFile通过套接字传输字节 在接收端,我检索字节的代码工作得相当好,但有时传输会随机停止 我发现,通过在检索下一个数据块之间设置一个小的睡眠延迟,可以使传输100%稳定 我检索数据(直到没有可用数据)的代码简化如下: While newSocket.Available > 0 Threading.Thread.Sleep(100) new

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

在接收端,我检索字节的代码工作得相当好,但有时传输会随机停止

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

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

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

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

Socket.Available返回到目前为止已接收到但尚未读取的字节总数。因此,如果你读的数据快于它的到来(在一个缓慢的网络上是完全可能的),即使客户端仍处于发送数据的中间,也不会有更多的数据被读取。 如果客户机为其发送的每个文件与服务器建立新连接,您只需将其更改为以下内容:

While newSocket.Connected
    If newSocket.Available > 0 Then
        newSocket.ReceiveFrom(data, Remote)
    End If
End While
但是,我建议使用异步调用,例如BeginReceive。然后,一旦有数据要处理,就会调用您的委托,而不是在一个常量循环中等待。有关示例,请参见此链接:


Socket.Available返回到目前为止已接收但尚未读取的字节总数。因此,如果你读的数据快于它的到来(在一个缓慢的网络上是完全可能的),即使客户端仍处于发送数据的中间,也不会有更多的数据被读取。 如果客户机为其发送的每个文件与服务器建立新连接,您只需将其更改为以下内容:

While newSocket.Connected
    If newSocket.Available > 0 Then
        newSocket.ReceiveFrom(data, Remote)
    End If
End While
但是,我建议使用异步调用,例如BeginReceive。然后,一旦有数据要处理,就会调用您的委托,而不是在一个常量循环中等待。有关示例,请参见此链接:


使用这种方法,无疑是一种平稳的转移。当我学到更多的时候,我会看看BeginReceive。谢谢使用这种方法绝对是一种平稳的转移。当我学到更多的时候,我会看看BeginReceive。谢谢