Linux 小实验之我的聊天室
现在学了linux网络编程,就想着做一个局域网聊天的小实验,虽然实验不难,但是个人感觉写代码这件事情非常好玩,做出一点好玩的东西与别人分享是一件很有意义的事,分享才会快乐。
不多说先来看看效果,自己想想这是如何实现的。
用户上线系统会统计在线人数个名字
其他客户端上线,自己也可以看到,模仿飞秋哦
默认情况下发送的时群聊信息
输入CHAT才会进入私聊模式,然后选择发送的对象,下图分别是A、B、C,B发消息给A,则C收不到
如果不在线会收到提示“*** NOT Online”,F已经下线,此时有人要和F聊天,在出现了不在线的提示,我应该在客户端收到消息的时候延迟一下,因为服务器找人需要一点时间,所以会出现下面这样的效果。
客户端输入quit则客户端退出
服务器输入quit则所有人都要退了,quit时由于有人在线,所以会提示
说一下UDP不好的地方,如果客户端是非法退出即Ctrl+c退出,服务器会认为这人依然在线,其他用户给他发的信息则会收不到。
再来说说我的聊天室的实现。这里采用的是UDP协议让客户端连接服务器,因为UDP是无连接的方式,高效率的传输数据。这里我让服务器创建一个子进程去帮忙与客户端交互,父进程去发送系统消息,让子进程广播。客户端发送数据到服务器,在让服务器将消息转发个其他用户或者指定的用户,实现一个群聊和私聊的功能。
本实验用到了数据结构的相关知识,一个简单的链表,链表需要实现插入和删除等基本功能,在链表中,数据类型不在是常用的INT型了,而是一个结构体型的,因为我们要将用户的地址信息保存起来。
服务器流程:
1.创建UDP套接字
2.创建子进程与客户端交互
3.子进程根据消息类型做不同的事
4.父进程发送系统消息给子进程,让子进程发给所有用户