c#tcp传输大文件出现乱码 对了,我的源代码在这里,大家帮我改改,谢谢了http://61.50.146.143/fs/fserver.rar 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 怎么加校验机制,我传小文件没问题呀,能不能给我发一个完整的异步传输文件的源代码,谢谢[email protected] 晕,TCP协议本来就是提供可靠的并且无差错的通信服务,适用于小报文的传输,大数据量用UDP 为什么都喜欢用TCP传大文件。 传送文件当然需要使用TCP啦,UDP是不可靠协议用来传送文件更加不安全不稳定。大文件出现问题我估计是你在发送数据块分割的时候,数据块边界出现了问题。另外你在TCP连接后双方接收数据的时候注意字符编码接收问题。 我的理解是这样的传输大的文件的时候,开始的时候(较短的一段时间之内)不会出现乱码的现象,后面就出现了乱码的现象,就是说,持续不断的传输大量数据,导致网络繁忙,比如N个循环传一个100B的buffer,后面由于网络忙,socket就会将它分为两个(或者更多)的小包(即报文)进行传输,而在客户端接收这些小包的顺序并不是按照从前到后的顺序,即,先收到的包就先拆开,也就导致了在客户端接收数据出现了乱码的问题 那个是UDP的问题。TCP有机制来保护。建议lz研究一下FTP之类的方式来传输大文件,单纯TCP的方式原理上也不会出问题,只是没人有时间看你的代码错在哪里。 不过是网络的问题,不是tcp的问题非对称丢包特性对TCP吞吐量的影响 http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece76310478027474380146b80c7150892d213cf3101061471e3cc70745713d3b22d3b1ccf1e1eb7b0706f44426be6fdb9ea57aefad97949f94523706bc41746c75cf28b102a8771d24de9de0e97bee741e0b9a2d1c82022&p=876dc64ad7934ea81efe88127f&user=baidutcp也会丢包,2. 非对称信道对TCP产生影响的方面 2) 增加前向链路突发.由于受拥塞窗口的限制,TCP只有在收到新的有效确认时,才能发送新的数据包.再回传路径带宽不足或高误码率是,很容易发生确认包丢失.而本该发送的新数据,由于确认包丢失则不能发送.当后续确认到达源端时,原来待发的数据就会和新确认所对应的数据包同时发出,造成突发.当丢失较多的确认包后有效确认到达时,源端就有可能在短时间内发送过多的数据,造成前向链路缓存溢出,产生丢包. TCP会不会丢包?http://bbs2.chinaunix.net/thread-610986-1-1.html至于丢包,是因为网络曾或者数据链路层或者物理层造成的。如果是因为TCP协议本身的问题,接收端会发送icmp差错报告,报告发送端TCP协议不可达.如果包没有按顺序到达,譬如编号1,5,而没有收到2,3,4,应用程序直到2,3,4都到达的时候才会读取。对于已经建立的连接,如果长时间没有数据交流,也会终止链接,释放tcp协议所开辟的缓存。【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免? http://www.cnblogs.com/xuyuan77/archive/2008/06/11/1217416.html4 楼youngwhz(sunbird)回复于 2003-09-23 13:58:19 得分 20比如发送文件。记得有人提过可能会发生什么堆栈溢出。??? TCP传输是可以保证数据交换的可靠性的,但这是指一方的主机将数据正确的传输到目标机器中,目标机器的协议栈的堆栈是有一定限制的,如果在目标机器中不及时处理接收到的数据,有可能堆栈会溢出!而这种溢出并不是因为TCP协议本身,而是因为系统的IP协议栈的缓冲区溢出造成! tcp也会丢包 不过是网络的问题,不是tcp的问题 乱码跟tcp协议无关,本身tcp提供的就是可靠连接,需要三次握手,需要保证数据传输完整性。应该是你接收端代码问题,比如过多的数据流导致的问题 一次发送数据并不是一个数据包,Tcp没有数据包的概念,是基于流的用流操作就可以了while(true){receivedLength = socket.Recive(bytes, 0, length);if(receivedLength == 0) break;fs.Write(bytes, 0, receivedLength);}fs.Close();ShowMessage("传输完成"); 分块,每块加上标识这块属于哪个位置,数据大小。我最近做了个UDP的。 1楼给的源代码我下载不了。不知道楼主用的是不是VS2008,我有个VS2008下的文件传输代码可供参考,在我的上传资源里。 兄弟是否可以说说你的UDP呢?方便的话贴代码出来大家瞧瞧? 似乎TCP是有校验的,这种丢包现象几率很小。 楼主给的源码下载不了。不过TCP socket在接收的时候有可能会有粘包现象,不知道楼主有没有自己把数据切块,并且记录每次发送的数据包的长度。如果单纯把数据直接发送出去,然后直接接收,而不判断长度,有可能在重新组包的时候出错 http://download.csdn.net/detail/czwwzc0184211/4030080 这里有Tcp传送文件的小例子!解决了Tcp粘包问题,无论发大文件,小文件都没问题!可以看看! 请教关于监听MSMQ的解决方案 问水晶报表简单的问题。 DataGridView 如何捆绑日期控件 字符串中的xml内容,被转义了怎么办? 怎么保持C# code的颜色到网页中 求一开源web html编辑器 就这点分全给了 请教关于列表的问题 HELP:一个打开程序帮助文档的问题 解决方案和项目重命名,名称空间没有随之变化 高分求一个图像算法,彩色-->黑白。 excel有三个sheet,我如何让 sheet(2) active。 求教关于验证控件对内容进行正则验证
[email protected]
大文件出现问题我估计是你在发送数据块分割的时候,数据块边界出现了问题。
另外你在TCP连接后双方接收数据的时候注意字符编码接收问题。
传输大的文件的时候,开始的时候(较短的一段时间之内)不会出现乱码的现象,后面就出现了乱码的现象,就是说,持续不断的传输大量数据,导致网络繁忙,比如N个循环传一个100B的buffer,后面由于网络忙,socket就会将它分为两个(或者更多)的小包(即报文)进行传输,而在客户端接收这些小包的顺序并不是按照从前到后的顺序,即,先收到的包就先拆开,也就导致了在客户端接收数据出现了乱码的问题
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece76310478027474380146b80c7150892d213cf3101061471e3cc70745713d3b22d3b1ccf1e1eb7b0706f44426be6fdb9ea57aefad97949f94523706bc41746c75cf28b102a8771d24de9de0e97bee741e0b9a2d1c82022&p=876dc64ad7934ea81efe88127f&user=baidutcp也会丢包,
2. 非对称信道对TCP产生影响的方面
2) 增加前向链路突发.由于受拥塞窗口的限制,TCP只有在收到新的有效确认时,
才能发送新的数据包.再回传路径带宽不足或高误码率是,很容易发生确认包丢
失.而本该发送的新数据,由于确认包丢失则不能发送.当后续确认到达源端时,
原来待发的数据就会和新确认所对应的数据包同时发出,造成突发.当丢失较多
的确认包后有效确认到达时,源端就有可能在短时间内发送过多的数据,造成前
向链路缓存溢出,产生丢包. TCP会不会丢包?
http://bbs2.chinaunix.net/thread-610986-1-1.html
至于丢包,是因为网络曾或者数据链路层或者物理层造成的。如果是因为TCP协议本身的问题,接收端会发送icmp差错报告,报告发送端TCP协议不可达.
如果包没有按顺序到达,譬如编号1,5,而没有收到2,3,4,应用程序直到2,3,4都到达的时候才会读取。
对于已经建立的连接,如果长时间没有数据交流,也会终止链接,释放tcp协议所开辟的缓存。【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免? http://www.cnblogs.com/xuyuan77/archive/2008/06/11/1217416.html
4 楼youngwhz(sunbird)回复于 2003-09-23 13:58:19 得分 20
比如发送文件。记得有人提过可能会发生什么堆栈溢出。???
TCP传输是可以保证数据交换的可靠性的,但这是指一方的主机将数据正确的传输到目标机器中,目标机器的协议栈的堆栈是有一定限制的,如果在目标机器中不及时处理接收到的数据,有可能堆栈会溢出!而这种溢出并不是因为TCP协议本身,而是因为系统的IP协议栈的缓冲区溢出造成!
一次发送数据并不是一个数据包,Tcp没有数据包的概念,是基于流的用流操作就可以了
while(true)
{
receivedLength = socket.Recive(bytes, 0, length);
if(receivedLength == 0) break;
fs.Write(bytes, 0, receivedLength);
}
fs.Close();
ShowMessage("传输完成");
我最近做了个UDP的。
兄弟是否可以说说你的UDP呢?
方便的话贴代码出来大家瞧瞧?
似乎TCP是有校验的,这种丢包现象几率很小。
解决了Tcp粘包问题,无论发大文件,小文件都没问题!可以看看!