TCP 协议出现重复的包.该怎么解决

TCP 协议出现重复的包.
本帖最后由 qlz37238 于 2015-02-27 21:52:05 编辑
这个是把发送端的桌面位图发送到接收端.然后接收端显示 显示在对话框上面.
用的是TCP协议.但是现在出现了一个问题就是在接收端接收到许多重复的包.
在发送与接收定义了自定义的结构 下面是伪代码

struct 包结构{
    ULONG 数据长度;//是用来保存当前结构的数据的长度 
    BYTE    标记; //用来标记是不是最后的包
    ULONG 偏移量;   //这个包的偏移量
    char       数据[2014];
}


发送端与接收端的缓冲区大小都是sizeof(包结构)  因为发送的数据比较大所以每次发送都是进行分段发送. 我在接收端new一个大小合适的内存(发送之前会有协商大小) 每次通过偏侈量对分配的内存进行定位然后写入数据长度那么多字节 .如果是标记的是最后一个包.那就在对话框显示发送端的桌面   我在接收端用的是IOCP. 现在就是如果发送端太快的接收端显示出来的桌面是很乱的.很花. 如果在发送端Sleep(20)的话.就显示正常.只不过这样的话太慢了每次显示. 我在接收端用TRACE显示接收到的偏移量值.结果看到有时候会输出几个连续一样的偏移量的值.  请教一下各位这种是什么问题造成的?
------解决思路----------------------
...这个问题的复杂程度绝对需要你提供更多的字数来详细描述。。。比如伪代码什么的。
------解决思路----------------------
大数据传输一般都要收到反馈后再发下一个包的,不能一次过全部发出去!
不管你是不是用iocp
------解决思路----------------------
估计是lz你自己的代码重复发送了,实际上大文件传输不需要你自己分块,TCP会自己划分为可以传输的块,windows在TCPIP扩展函数中,有一个叫TransmitFile的函数用于传输文件用
------解决思路----------------------
用抓包工具看一下封包发送是否正确。
------解决思路----------------------
看看发送端的偏移量是否重复,不过如果只是重复,桌面也不会花才对。
你确认一下是否漏包吧。。
------解决思路----------------------
先保证发送侧没有重复发包,
在调试通讯程序的时候,不要打断点跟踪,
将调试信息输出到日志文件中,根据日志文件来分析
------解决思路----------------------
是不是发送的包偏移等计算有问题,多加点log日志等分析一下
------解决思路----------------------
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545

建议楼主学会使用抓包软件比如wireshark
------解决思路----------------------
建议你在接收端,将接收到的所有数据放存在一个文件中与发送端的做一个比较,我之前做过一个例子,
http://www.itye.org/archives/1178
------解决思路----------------------
不用看代码,我可以肯定是楼主代码问题,TCP是不会发重复包的。好好查查你拆分包的代码逻辑吧!