C# TCP 传文件出现粘包问题
客户端代码:
IAsyncResult ir = null;
IAsyncResult br = null;
while (true)
{
ir = fs1.BeginRead(buffer, 0, buffer.Length, null, null);
avSize = fs1.EndRead(ir);
br = n.BeginWrite(buffer, 0, avSize,null, null);
n.Flush();
n.EndWrite(br);
// Thread.Sleep(1); /////////////////////////// 1
userControl11.progressBar1.Value += avSize;
int liang = userControl11.progressBar1.Value / 1024;
userControl11.label4.Text = liang + " KB";
if (avSize != buffer.Length)
break;
}
服务端代码:
int avSize = 0;
byte[] buffer = new byte[bufferSize];
FileStream fs = new FileStream(filePath, FileMode.Append);//FileMode.OpenOrCreate | FileMode.Append
fs.Position = offset;//设置断点续传位置
stream.Flush();
while ((avSize = stream.Read(buffer, 0, bufferSize)) > -1)
{
fs.Write(buffer, 0, avSize);
fs.Flush();
if (avSize != bufferSize)
break;
}
客户端和服务端同时在本机测试的时候正常。因为没有流量限制。
在局域网下同一个网段时,传小文件没有问题(1m以下),稍大点的文件就会出现传过去的文件比实际的小很多。结果打不开。当我在上面代码位置1处,取消注释。就可以了,但是速度非常慢,局域网下都只有60k/s,请问有没有什么解决办法?
IAsyncResult ir = null;
IAsyncResult br = null;
while (true)
{
ir = fs1.BeginRead(buffer, 0, buffer.Length, null, null);
avSize = fs1.EndRead(ir);
br = n.BeginWrite(buffer, 0, avSize,null, null);
n.Flush();
n.EndWrite(br);
// Thread.Sleep(1); /////////////////////////// 1
userControl11.progressBar1.Value += avSize;
int liang = userControl11.progressBar1.Value / 1024;
userControl11.label4.Text = liang + " KB";
if (avSize != buffer.Length)
break;
}
服务端代码:
int avSize = 0;
byte[] buffer = new byte[bufferSize];
FileStream fs = new FileStream(filePath, FileMode.Append);//FileMode.OpenOrCreate | FileMode.Append
fs.Position = offset;//设置断点续传位置
stream.Flush();
while ((avSize = stream.Read(buffer, 0, bufferSize)) > -1)
{
fs.Write(buffer, 0, avSize);
fs.Flush();
if (avSize != bufferSize)
break;
}
客户端和服务端同时在本机测试的时候正常。因为没有流量限制。
在局域网下同一个网段时,传小文件没有问题(1m以下),稍大点的文件就会出现传过去的文件比实际的小很多。结果打不开。当我在上面代码位置1处,取消注释。就可以了,但是速度非常慢,局域网下都只有60k/s,请问有没有什么解决办法?
...全文
相关推荐
C# TCP粘包解决
完美解决粘包!!值不值你说了算
C#实现TCP粘包问题的解决方案:长度头部处理
在使用TCP协议进行数据传输时,应用程序可能会遇到所谓的"粘包"问题。粘包并不是一个正式的网络术语,它是指在连续发送数据时,由于TCP协议的流式特性,接收方无法区分数据边界,导致接收到的数据包不是发送时的原始数据包,而是多个数据包粘合在一起的情况。这种现象可以导致数据解析上的困难,尤其是当应用层协议需要精确解析每个独立消息的时候。Socket编程是网络通信编程的基础,它允许应用程序之间通过网络进行通信。在C#中,Socket类是位于System.Net命名空间下的一个类,提供了用于网络通信的丰富功能。
C#中TCP粘包问题的解决方法
主要为大家详细介绍了C#中TCP粘包问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
C#实现Socket编程 (异步通讯,解决Tcp粘包)第三阶段
C#实现Socket编程 (异步通讯,解决Tcp粘包)
unity实现Socket通讯(内含tcp粘包/拆包解决)
通过socket通讯实现服务器与客户端的连接。首先服务器利用udp广播发送自己的ip地址,客户端在收到广播后通过此ip以tcp连接的方式连接服务器来通讯。


