C#套接字图像传输:文件有时会部分传输

时间:2011-06-26 05:16:53

标签: c# php sockets

问题

我有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

如何在没有中间状态的情况下始终传输完整文件?为什么会这样?

1 个答案:

答案 0 :(得分:3)

来自Socket.Receive的文档:

  

如果使用面向连接的套接字,则Receive方法将读取尽可能多的数据,最多为size参数指定的字节数。如果远程主机使用Shutdown方法关闭Socket连接,并且已收到所有可用数据,则Receive方法将立即完成并返回零字节。

这意味着您可能会比总金额更少。这就是套接字工作的方式。

因此,如果您获得部分阅读,则应再次致电Socket.Receive。您可以使用Socket.Receive的重载继续读取相同的缓冲区。

这篇文章展示了如何“继续阅读”,直到得到你想要的东西:

如果您不知道数据有多大,则必须继续阅读,直到Socket.Receive返回零。