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,这样就解决了发送信息和传递文件的丢包问题,如果是视频、声音,可仿照传文件的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨正同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值