一个简单的linux课程设计--《基于socket聊天室的设计与实现》 帮忙分析下~
临近期末了,要做linux课程设计。
题目和要求如下:
现要求编写一个基于Linux平台C语言程序,使用Linux Socket,多进程或线程等技术编写一个聊天程序。每个客户程序通过服务器发送聊天信息给聊天时的(已经登录连接)所有人或某个人。
基本功能:每个客户程序通过服务器发送聊天信息给聊天时的所有人。
扩展功能:①接收用户输入或显示聊天消息方式为图形化界面;②支持对没有登录的聊天室成员发送聊天记录;③支持查找历史聊天纪录;
----------------
以上是老师给出的原封不动的要求
这个课程设计不难,功能不要求多,但是有些方面不是很明白,感觉想做的好点也不容易~
以下是我的打算
1.界面用QT去做(qt尚不熟悉,打算临时学几手,做出个界面应该不成问题),但是多线程和网络这两块必须是直接调linux的api,否则也就不叫linux课程设计了。
2.服务端是做成一个单独的程序(运行时,先启动服务端,然后客户端之间才能通信,必须依赖于固定的服务端),还是服务端和客户端集成在一起(启动时,若发现当前局域网不存在服务器就自己启动一个服务器,若存在,就直接连接服务器)?我更倾向于后者,因为这个小程序的服务端肯定不会太庞大,服务端和客户端集成在一起比较灵活~
3.支持群聊和私聊,群聊的话,消息经过服务器转发,服务器和客户端都保存聊天记录,。私聊就两个客户端直接通信,聊天记录只保存在本地。
4.对没有登录的成员发送聊天记录,这个应该比较简单,客户端上线后,服务器直接将保存在群聊记录发给它。
5.查找历史聊天记录,这个就暂时直接读取本地保存的聊天记录吧
------------
基于以上打算,会产生以下问题,该如何解决?
首先是第2点,服务端和客户端集成在一起,如果当前是服务器的那个用户退出了(或者程序意外终止)怎么办?整个系统的运行必须要有服务端的支持才行的。可以考虑这个时候按照一个协议在其余的用户中协商出一个用户作为服务端。。。不过感觉这样,整个系统的复杂度就大大增了,而且原先的服务器上保存的群聊记录就不能使用了~对于要求中的第二点的实现又会产生影响!
还有就是,飞秋,飞鸽传输之类局域网聊天软件是如何实现的?以前自己在windows上写过类似于这个课程设计的小程序,客户端上线后直接向指定的端口广播UDP消息,其它客户端应答,这样就能构建一个当前在线用户的列表,然后每个客户端就能直接通信,不要服务端的存在。但是如果在用户很多的情况下,感觉通过这样的方式来构建和更新在线用户列表太得不偿失了~,通过服务端来维护在线用户列表更实际些。
如果服务端作为一个单独的程序运行的话,上面的大部分问题可轻松解决,但是。。。。我想让程序更灵活,不依赖于固定的服务器就能使用。
-------------
最后,有木有一些合适的源码推荐给我参考下的~