4、P2P开发历程之——vb6之P2P简单实现(解决丢包问题)

udp协议相对TCP协议最明显的优点是什么?

效率呗;

udp协议最显著的一个缺点是什么?

额。。。丢包率太高。

 

其实解决丢包问题说起来很简单——收包后答复。当然同时要做的有:收不到就要求重发,收重复了丢弃,如果是文件还要排序。

但是,在现实中,不可能只有两个人在通讯,也不可能发一条消息就等着。

解决这个问题的方案:队列(也可称之为缓冲)

声明一个type

type Spool

    id as long '编号
    content as string'包内容
    flag as boolean'状态

end type


然后在程序中使用

dim msg_common(64) as spool


每发一条消息先发送一次,然后放到队列中,等待目标返回确认信息后修改flag。

队列的长度要根据实际情况来决定,如果是要发消息,5条记录的缓冲足矣,因为每个TIMER时间片都要用循环的方式来判断队列中每条的状态,队列长度直接影响性能,而你用多线程技术来处理超长队列的话,也不能有效提高客户端的用户体验,太久的延迟不如让他去检查网络。

 

如果是发送文件,为了传输效率,这个队列就要有足够的长,队列的声明也要稍作改动

type Spool

    content as string'包内容
    flag as boolean'状态

end type


 

队列太长的话,就不能再用循环的方式判断每一条状态了,直接一组一组的发,一组发送完毕再发送另外一组。而判断状态的方法也要改变,发送方不需要主动判断有没有发送成功,让接收方判断有没有收到相应的包,然后让发送方重发就是,发送方直接用队列索引寻址。

 

OK,这样就解决了发送信息和传递文件的丢包问题,如果是视频、声音,可仿照传文件的方式

你可能感兴趣的:(VB6开发P2P)