关于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#初学者请大家指教,谢谢!
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
cactis0906
2012-02-23 · TA获得超过138个赞
知道小有建树答主
回答量:154
采纳率:100%
帮助的人:90.6万
展开全部
溢出了,建议将数据分包发送
追问
对,查了下是溢出了,但是我不知道怎么分包发送,然后怎么在接收端在整合成一个文件,具体要用到什么方法呢?谢谢指教!
追答
网上也不少说得挺详细的文章。思路大概是,你把数据拆分成n个大小相同的包,加上包头和包尾,包头包括一些数据包信息,比如包的大小,包的数目等。包尾可以加一些校验码之类,你根据包的大小和数目进行一个循环接收就行了,接完就跳出循环
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式