问题
我有PHP
客户端,它将图像文件发送到C#
套接字服务器。我的问题是文件部分转移>> 30%并停止。
PHP END - >
$file = file_get_contents('a.bmp');
socket_write($socket,$file);
C#END - >
int l= Socket.Receive(buffer, buffer.Length, SocketFlags.None);
//create the file using a file stream
如何在没有中间状态的情况下始终传输完整文件?为什么会这样?
答案 0 :(得分:3)
来自Socket.Receive的文档:
如果使用面向连接的套接字,则Receive方法将读取尽可能多的数据,最多为size参数指定的字节数。如果远程主机使用Shutdown方法关闭Socket连接,并且已收到所有可用数据,则Receive方法将立即完成并返回零字节。
这意味着您可能会比总金额更少。这就是套接字工作的方式。
因此,如果您获得部分阅读,则应再次致电Socket.Receive
。您可以使用Socket.Receive
的重载继续读取相同的缓冲区。
这篇文章展示了如何“继续阅读”,直到得到你想要的东西:
如果您不知道数据有多大,则必须继续阅读,直到Socket.Receive
返回零。