linux下基于TCP/IP协议的socket即时通讯
功能:
1,群聊
2,私聊
3,禁言
4,解除禁言
5,群主设置
6,群主解除管理员
7,修改密码
8,发送文件
9,修改昵称
10,查看在线人数
11,踢人下线
12,查看聊天记录
13,忘记密码
代码都在这里,可以自行下载CSDN下载
链接好像有问题.......打不开就算了吧,这东西也不难
这里我讲下主要思路,因为我觉得思路比代码更重要。
服务器端监听,一旦有客户端连接便开辟一个新线程,另外将这个客服端的套接字插入服务器端的在线聊表,这个新开的线程专门与这个客户端通信,专门用来处理这个客户端发来的指令。
怎么实现群聊的呢?
客户端发送消息后,服务器收到来自客户端的消息(即发来的结构体)分析结构体中work指令来判断是群聊抑或是其他操作,假设现在群聊的work为1,当服务器端通过switch(work) case到work == 1后,便将结构体中的用来存放信息的字符串中的内容通过在线聊表(聊表中存放所有在线的客户端)发送给每一个在线的客户端,客户端收到来自服务器的信息也进行相似的操作——即判断结构体中的work,若是1(即群聊)则将存放信息的字符串打印出来。
那么私聊呢?
比如说A被禁言了,在服务器端本地的数据库(我使用的是sqlite3)中其对应的账号信息中是否禁言这个字段便会被置为1(默认为0),在每次A发送群聊消息后服务器都会先检查其是否禁言的flag是否为1,若不是才会将信息通过在线聊表发往每个客户端,若不是则通知A你被禁言了。
至于群主和管理员
群主是我设置的一个系统账号吧,在最开始建数据库时便由客户端代码执行插入的账号,其在数据库中root字段为1(默认为0),其实后续的就是判断其数据库中的root就行了,然后就可以进行相应的指令控制。