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