关于socket发送大于100M文件时出现的错误
这个是报错:无法将数据写入传输连接:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。。if(result.Equals(string.Empty)){try{b...
这个是报错:无法将数据写入传输连接: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。。
if (result.Equals(string.Empty))
{
try
{
byte[] buf = File.ReadAllBytes(filePath);//filePath文件路劲
SendData(buf, HostIP);//HostIP IP地址
Console.WriteLine("发送成功!");
}
catch (Exception e)
{
Console.WriteLine("错误:" + e.ToString());
continue;
}
}
void SendData(byte[] buf, string hostIP)
{
try
{
Thread.Sleep(1000);
TcpClient tc = new TcpClient();
tc.Connect(IPAddress.Parse(hostIP), 2000);
NetworkStream ns = tc.GetStream();
ns.Write(buf, 0, buf.Length);
ns.Flush();
ns.Close();
tc.Close();
}
catch (Exception err)
{
Console.WriteLine(err.ToString());
}
}
上面是我的程序一部分,请教一下为什么总是报错,不是说tcp可以自己分开段来传输吗?在网上查过后有思路说是把一个文件分成几块分别传输,但是怎么实现一直搞不明白,C#初学者请大家指教,谢谢! 展开
if (result.Equals(string.Empty))
{
try
{
byte[] buf = File.ReadAllBytes(filePath);//filePath文件路劲
SendData(buf, HostIP);//HostIP IP地址
Console.WriteLine("发送成功!");
}
catch (Exception e)
{
Console.WriteLine("错误:" + e.ToString());
continue;
}
}
void SendData(byte[] buf, string hostIP)
{
try
{
Thread.Sleep(1000);
TcpClient tc = new TcpClient();
tc.Connect(IPAddress.Parse(hostIP), 2000);
NetworkStream ns = tc.GetStream();
ns.Write(buf, 0, buf.Length);
ns.Flush();
ns.Close();
tc.Close();
}
catch (Exception err)
{
Console.WriteLine(err.ToString());
}
}
上面是我的程序一部分,请教一下为什么总是报错,不是说tcp可以自己分开段来传输吗?在网上查过后有思路说是把一个文件分成几块分别传输,但是怎么实现一直搞不明白,C#初学者请大家指教,谢谢! 展开
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
溢出了,建议将数据分包发送
追问
对,查了下是溢出了,但是我不知道怎么分包发送,然后怎么在接收端在整合成一个文件,具体要用到什么方法呢?谢谢指教!
追答
网上也不少说得挺详细的文章。思路大概是,你把数据拆分成n个大小相同的包,加上包头和包尾,包头包括一些数据包信息,比如包的大小,包的数目等。包尾可以加一些校验码之类,你根据包的大小和数目进行一个循环接收就行了,接完就跳出循环
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询