我设法通过TCP使用NetworkStream
和套接字发送二进制数据。 我唯一的问题是,当我发送较大的文件,如几百KB的图像,他们没有得到正确的传输,图像的一半丢失。在服务器端I Socket.Send
传输数据。在客户端,我使用Socket.BeginReceive
和1024
大小的缓冲区,将其写入MemoryStream
,稍后使用new Bitmap(Stream)
将该MemoryStream
转换为可在PictureBox
中显示的图像。C#通过互联网发送文件
我应该使用什么方法来避免数据丢失?
编辑:代码发布
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();
编辑:数据仍然是腐败有时甚至与睡眠方法。
请发布您的代码,以便发现错误。 – Oded
发布您的代码。如果没有,我们只是猜测。 – ChrisF
这看起来没问题,所以假设它不是网络问题,在发送方或接收方都有问题,我们需要查看该代码。 – nos