【发布时间】:2012-01-06 10:19:21
【问题描述】:
我设法使用NetworkStream 和套接字通过TCP 发送二进制数据。
我唯一的问题是,当我发送像几百 KB 图像这样的较大文件时,它们无法正确传输,图像的一半丢失了。在服务器端我Socket.Send 来传输数据。在客户端,我使用Socket.BeginReceive 和1024 大小的缓冲区,该缓冲区被写入MemoryStream,稍后我使用new Bitmap(Stream) 将MemoryStream 转换为可以在PictureBox 中显示的图像。
我应该使用什么方法来避免数据丢失?
编辑:发布代码
listener = new TcpListener(myAddress, 86);
listener.Start();
TcpClient client = listener.AcceptTcpClient();
ns = client.GetStream();
byte[] buffer = new byte[1024];
while (fileTransfer)
{
ms = new MemoryStream();
do
{
int length = ns.Read(buffer, 0, buffer.Length);
ms.Write(buffer, 0, length);
// with this line added the data loss apparently disappears
System.Threading.Thread.Sleep(1);
} while (ns.DataAvailable);
UpdateData();
ms.Dispose();
System.Threading.Thread.Sleep(10);
}
ns.Dispose();
client.Close();
listener.Stop();
编辑:即使使用 sleep 方法,数据有时仍会损坏。
【问题讨论】:
-
请张贴您的代码,以便您发现错误。
-
发布您的代码。没有它,我们只是在猜测。
-
这似乎没问题,所以假设这不是网络问题,您在发送端或接收端的某个地方有错误,我们需要查看该代码。