一个基于C+和UDP的简单即时通信服务器的实现

一转眼,时间已经到了2018年。在过去的一年中,人工智能被炒作得火热,而数字货币市场也风起云涌。而IT市场的行业垄断也日益严重,各种电子产品相继涨价,玩起了“萝卜涨”。

我无法预测目前的这些行业热点在未来会有什么发展,但是有一个事实是明了的:信息产业的“田园时代”已经过去,网络匿名已经日益成为一种奢侈。从之前的各种网络资源被移除,到今年中旬来姐QQ被封号,再到后来几乎所有网络平台都要求“实名制”,我国对信息产业的监管力度正迈向一个前所未有的高峰。

我有点害怕,说不定将来的哪天我会因为聊天记录而去坐文字狱。我觉得自建即时通讯服务器已经有了一定的必要性。

于是,现学现用,我花了几天时间学习了一点网络通信和信息安全方面的知识,设计并实现了一个简单的网络即时通讯体系

这套体系是需要服务器的,所谓的服务器,主要是利用它的固定IP地址的优势。利用一个固定的IP来为没有固定IP(甚至是处于内网)的客户端们牵线搭桥。服务器只存账号密码和该账号目前的IP地址以及端口号。每当客户端上线,服务器验证客户端的身份,并登记它目前所使用的IP地址。当客户端希望与另一个客户端通信时,它首先查询本地的缓存,如果缓存不命中,就继续询问服务器。获得对方的地址后,直接向对方发送信息。如果对方不在线,可以选择将信息缓存在服务器上。这些通信可以对内容进行非对称加密,从而保证安全性。所以只要愿意,即使攻击者完全控制了服务器,也不会有信息泄露的风险,同时接受者还能顺利收到消息。

同时,无论客户端和服务器怎么实现,只要符合信息发送的格式,就能做到互相通信,所以人人都能够定制并架设这样的服务器。

比如我的服务器端的实现是这样的:

服务器进行初始化后,进入一个while(1)循环,不断等待接收UDP请求,并将处理结果返回给客户端。

目前已完成的功能:

1. 注册

2. 登陆

3. 上线

4. 下线

5. 请求其他用户IP

6. 基于MD5的密码加密

未完成功能:

1. 基于区块链的用户信息保存

2. 多服务器同步功能

3. 数据持久化

4. 非对称的通信加密

5. 数据包压缩以节省带宽

6.混淆算法(如果以后该服务被封就得用了

客户端设计指导:

参阅:

https://github.com/ZhehooMorgen/pigeon/blob/master/README.md

作者:Sin

编辑:囧星人&喵

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180121G0MWOD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券