对了,我的源代码在这里,大家帮我改改,谢谢了
http://61.50.146.143/fs/fserver.rar
http://61.50.146.143/fs/fserver.rar
解决方案 »
- C#异步服务器端如何实现向不同客户端发送不同数据
- com.Write()发送16进制数据为什么不成功
- TcpListener监听端口保存数据只能读到开始的,后面都不能读了
- 取网卡 mac 地址
- 谁能帮我解释一下这段代码什么意思
- 如何给多个前缀一样后面是数字的label赋值?
- ADO.NET连接ODBC数据源的问题
- 请问高手这样如何处理:在使用WebBrowser控件的问题,高分求解
- 消息队列处理慢出现消息积压现象求解
- 解析json始终有问题 json是JSonhelper直接存在txt做日志文件的现在想读出来分析
- 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粘包问题,无论发大文件,小文件都没问题!可以看看!