当前位置:编程学习 > C#/ASP.NET >>

socket传送文件的大小问题

我再用socket传送文件的时候
传送很小的文件没有问题在传个600K的文件都发生错误

A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself

我用的UdpClient.Send()
来发送的 --------------------编程问答-------------------- 自己顶 --------------------编程问答-------------------- 看看设置,错误提示说你文件的大小比默认的缓冲区大小要大,
发送文件我都用异步socket,这个没有用过 --------------------编程问答-------------------- 我设置了跌UdpClient.Client.SendBufferSize和
UdpClient.Client.ReceiveBufferSize
还是一样的错误 --------------------编程问答-------------------- 大哥们过来帮帮我啊 --------------------编程问答-------------------- 关注

--------------------编程问答-------------------- up --------------------编程问答-------------------- 没有人知道????? --------------------编程问答-------------------- 应该是你一次性把所有文件内容都送进了缓冲区。

应该把文件内容分段发送

开辟一段缓冲区, 一边连着文件, 另一边连着socket, 边读边发送

FileStream  fs = new FileStream();

int bytesRead = 0;
byte[] buff = new byte[1024];
do
{
     n = fs.Read(buff, 0, buff.Length);//读
     socket.Send(buff, 0, n);//发送
}
while(n > 0); --------------------编程问答-------------------- --------------------编程问答-------------------- 等待解决! --------------------编程问答--------------------

传送文件很少人用UDP,特别还是大数据量的时候更少用,建议你还是用TCP吧,那个可靠,用UDP相当麻烦,在接收方写入文件的时候,还要判断先后顺序,还要自定义重发机制,以及超时处理,反正相当麻烦 --------------------编程问答-------------------- 1.UDP不可靠,需要做数据校验的
2.文件的发送是要分包的,就现在的网络速度,估计一个包在4k以内比较合适.
3.UDP默认的发送和接受缓冲好像是8k.
4.分包发送需要额外在包上加一些附加的信息,如文件的信息,包的次序问题
还需要考虑丢包重传问题.
5.如果不需要穿透NAT,发送文件建议使用TCP,方便很多. --------------------编程问答-------------------- 一次socket send 8k 左右,如果一 次SEND 太多,会超过包限制的 --------------------编程问答-------------------- 而且UDP发送文件接收需要进行文件检验
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,