毕业设计-类似qq即时通信软件

毕业设计课题很多,最后选择了对我来说稍微有点难度,但有能实现的题目:类似qq即时通信软件。

既然是类似qq,就应该好好的去了解下qq的原理。因为之前写过有关通信方面的东西,而且天天用qq也不陌生了。再我的理解看来,qq的核心通信当然是udp了,基本上发信息,等等都是用udp通信。qq客户端与服务器不会一直保持连接状态,因为那样对服务器负载很大,他会时不时的向服务器端发送“我还在线”的信息,来通知服务器,我还在线。当有一段时间服务器接收不到“我还在线”的信息的时候,这时候就可以考虑,我是不是已经掉线了,是否该通知我的好友我掉线了。这就是为什么当我们直接异常的断开qq与网络的连接的时候。在相当一部分时间段里。我确实已经上不去qq了,但我的好友的列表里还显示我还在线的原因吧。其实我认为这个“我还在线”的信息,就是所谓的心跳数据包。

当我要和我的好友聊天的时候,发送消息,应该是发送给服务器的。然后通过服务器转发,来发送到好友那里。这里要说一下,qq肯定有自己处理信息包丢包的方法。我大概想到的,就是我跟好友聊天发送消息的时候,每次发送,都会等待服务器发回的确认包。服务器接收到我发送的消息,回给我个确认包,这时候我才知道,我发送的消息没有丢失。如果说,我发送消息没有丢失,服务器接收到了。但服务器回发给我的确认包,我却没有接到。这时候就会提示我:信息发送失败。这也就是为什么,当网络非常卡的时候用qq发送消息。明明对方已经接收到我发的消息了。却还提示我,信息发送失败。qq这么做,把信息有效传输的问题抛给用户,不再程序上做更复杂的处理,是比较聪明的做法了。不必花更多精力更多金钱来写程序,而且还做到了信息的有效传输,还不为用户买单。

消息是服务器中转模式的。

但语音,视频,文件传输等,都是以p2p方式来传输的。

更详细的对qq的分析我想也没必要了。有了这些。对自己的这个即时通信软件写起来就比较方便了。

我设计的这个软件原理跟qq类似。但我想,聊天的消息不会用服务器中转,服务器只提供软件的登录请求,维护在线列表,和好友列表信息等等。聊天,语音,视频等,都是经过p2p方式,因为毕竟是毕业设计。没有那么多时间去设计服务器,加上协议,时间就已经相当紧迫了。

 

 

前一段时间弄了协议,不知道还有没有bug,怕就怕,在写程序的过程中,突然发现这段协议有些问题……然后一改……

客户端协议

上发数据包基本协议格式

0x7E

版本号(1)

校验(1)

类型(1)

数据(n)

0x7E

0x7e为数据包头部 +版本号(程序版本号)+数据包校验部分+类型+数据+数据包尾

数据全部由16进制表示

1.1数据包头部跟尾部

数据包头跟尾部本人设计为7E 16进制

1.2版本号

版本号 因为本程序是第一次设计.所以版本号设计为1.0版本

(1)代表一个字节

1.3校验和

校验和 根据我在公司做的GPRS协议的经验,校验和算法比较简单为从类型

开始到数据段的各个字节带位累加和.1字节,表示范围为0~255 当最高位为1.更改为0.

可根据不同要求,进行不同的校验和计算.

1.4类型

类型是按客户端发送的不同的数据设计的.由于时间关系.功能没有完全实现.所以类型仅为7,二次开发的时候可以根据不同需要增加相应类型

01为注册请求(详情请参考客户端注册协议部分)

02为登录请求(详情请参考客户端登录协议部分)

03为下载好友列表请求(详情请参考客户端下载好友列表请求)

04更改在线状态请求(详情请参考客户端更改在线状态)

05下线指令(详情请参考客户端下线指令)

06查找在线客户端请求(详情请参考客户端查找在线客户端请求)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值