我正在做一个用POP3接收邮件的模块,在和服务器建立连接和发送收信指令后,
服务器将邮件分包发送过来,程序负责对所有的包进行组包以还原整封邮件,
当邮件很小或网络很畅通时邮件完整无缺,当接收大邮件(几M)时则邮件会被
损坏,比较明显的现象是有邮件附件是BMP位图时,预览位图可以看到位图已被
损坏,用UltraEdit比较 正常的位图和被损坏的位图,发现被损坏的位图比正
常的位图多了一些数据块,证明不是网络丢包而是收到了重复的包,哪么如何准确地
排除掉重复的包呢?我已经做了如下操作,有一定效果,但在网络比较忙时组包后还是有一些重复的包:1、保存每个包的序列号,当下个包来时如果序列号已存在则丢弃该包
2、保存每个包的(序列号+长度)的一个数值,如果下个包的序列号在这个区间则丢弃该包
3、对所有的包排序,以序列号升序排列
请教各位高手!另一帖在 http://community.csdn.net/Expert/topic/3166/3166113.xml?temp=4.340762E-02
服务器将邮件分包发送过来,程序负责对所有的包进行组包以还原整封邮件,
当邮件很小或网络很畅通时邮件完整无缺,当接收大邮件(几M)时则邮件会被
损坏,比较明显的现象是有邮件附件是BMP位图时,预览位图可以看到位图已被
损坏,用UltraEdit比较 正常的位图和被损坏的位图,发现被损坏的位图比正
常的位图多了一些数据块,证明不是网络丢包而是收到了重复的包,哪么如何准确地
排除掉重复的包呢?我已经做了如下操作,有一定效果,但在网络比较忙时组包后还是有一些重复的包:1、保存每个包的序列号,当下个包来时如果序列号已存在则丢弃该包
2、保存每个包的(序列号+长度)的一个数值,如果下个包的序列号在这个区间则丢弃该包
3、对所有的包排序,以序列号升序排列
请教各位高手!另一帖在 http://community.csdn.net/Expert/topic/3166/3166113.xml?temp=4.340762E-02
所有的包有一个共同的ID表明是本次发送的数据
在拆包前先发送包的数目(跟序号对应),每收到一个包将这个序号做标记,下次收到就丢弃
我以前写socket就是这么做的,没出现什么问题
仅供你参考,具体细节我也忘了,一年半都没写这种程序了
其实那个帖子我说的那个方法已经能保证99%的正确性了呵呵可惜很多网络版的高手都不来了,要不问问他们或许能有个结果-_-#TO BLsoft(网龙)
楼主说的是类似sniffer的东西,监听到的都是最原始的数据包,然后把与pop3有关的数据包重组起来合成一个mail的