C#套接字映像传输:文件有时会部分传输
本文关键字:传输 会部 套接字 映像 文件 | 更新日期: 2023-09-27 18:00:19
问题
我有一个PHP
客户端,它将图像文件发送到C#
套接字服务器。我的问题是30%文件被部分传输并停止的时间。
PHP结束->
$file = file_get_contents('a.bmp');
socket_write($socket,$file);
C#结束->
int l= Socket.Receive(buffer, buffer.Length, SocketFlags.None);
//create the file using a file stream
如何在没有中间状态的情况下始终传输完整文件?为什么会发生这种情况?
来自Socket.Receive:的文档
如果使用面向连接的Socket,Receive方法将读取尽可能多的可用数据,最多不超过size参数指定的字节数。如果远程主机使用Shutdown方法关闭Socket连接,并且已接收到所有可用数据,则Receive方法将立即完成并返回零字节。
这意味着您可能会得到少于总量的。这就是套接字的工作方式。
因此,如果得到部分读取,则应该再次调用Socket.Receive
。您可以使用Socket.Receive
的重载继续读取同一缓冲区。
这里有一篇文章展示了如何"继续阅读",直到你得到你想要的:
- 套接字发送和接收
如果您不知道数据有多大,则必须继续读取,直到Socket.Receive
返回零。