当前位置: 技术问答>linux和unix
一个简单的linux课程设计--《基于socket聊天室的设计与实现》 帮忙分析下~
来源: 互联网 发布时间:2017-02-25
本文导语: 临近期末了,要做linux课程设计。 题目和要求如下: 现要求编写一个基于Linux平台C语言程序,使用Linux Socket,多进程或线程等技术编写一个聊天程序。每个客户程序通过服务器发送聊天信息给聊天时的(已经登录连...
临近期末了,要做linux课程设计。
题目和要求如下:
现要求编写一个基于Linux平台C语言程序,使用Linux Socket,多进程或线程等技术编写一个聊天程序。每个客户程序通过服务器发送聊天信息给聊天时的(已经登录连接)所有人或某个人。
基本功能:每个客户程序通过服务器发送聊天信息给聊天时的所有人。
扩展功能:①接收用户输入或显示聊天消息方式为图形化界面;②支持对没有登录的聊天室成员发送聊天记录;③支持查找历史聊天纪录;
----------------
以上是老师给出的原封不动的要求
这个课程设计不难,功能不要求多,但是有些方面不是很明白,感觉想做的好点也不容易~
以下是我的打算
1.界面用QT去做(qt尚不熟悉,打算临时学几手,做出个界面应该不成问题),但是多线程和网络这两块必须是直接调linux的api,否则也就不叫linux课程设计了。
2.服务端是做成一个单独的程序(运行时,先启动服务端,然后客户端之间才能通信,必须依赖于固定的服务端),还是服务端和客户端集成在一起(启动时,若发现当前局域网不存在服务器就自己启动一个服务器,若存在,就直接连接服务器)?我更倾向于后者,因为这个小程序的服务端肯定不会太庞大,服务端和客户端集成在一起比较灵活~
3.支持群聊和私聊,群聊的话,消息经过服务器转发,服务器和客户端都保存聊天记录,。私聊就两个客户端直接通信,聊天记录只保存在本地。
4.对没有登录的成员发送聊天记录,这个应该比较简单,客户端上线后,服务器直接将保存在群聊记录发给它。
5.查找历史聊天记录,这个就暂时直接读取本地保存的聊天记录吧
------------
基于以上打算,会产生以下问题,该如何解决?
首先是第2点,服务端和客户端集成在一起,如果当前是服务器的那个用户退出了(或者程序意外终止)怎么办?整个系统的运行必须要有服务端的支持才行的。可以考虑这个时候按照一个协议在其余的用户中协商出一个用户作为服务端。。。不过感觉这样,整个系统的复杂度就大大增了,而且原先的服务器上保存的群聊记录就不能使用了~对于要求中的第二点的实现又会产生影响!
还有就是,飞秋,飞鸽传输之类局域网聊天软件是如何实现的?以前自己在windows上写过类似于这个课程设计的小程序,客户端上线后直接向指定的端口广播UDP消息,其它客户端应答,这样就能构建一个当前在线用户的列表,然后每个客户端就能直接通信,不要服务端的存在。但是如果在用户很多的情况下,感觉通过这样的方式来构建和更新在线用户列表太得不偿失了~,通过服务端来维护在线用户列表更实际些。
如果服务端作为一个单独的程序运行的话,上面的大部分问题可轻松解决,但是。。。。我想让程序更灵活,不依赖于固定的服务器就能使用。
-------------
最后,有木有一些合适的源码推荐给我参考下的~
题目和要求如下:
现要求编写一个基于Linux平台C语言程序,使用Linux Socket,多进程或线程等技术编写一个聊天程序。每个客户程序通过服务器发送聊天信息给聊天时的(已经登录连接)所有人或某个人。
基本功能:每个客户程序通过服务器发送聊天信息给聊天时的所有人。
扩展功能:①接收用户输入或显示聊天消息方式为图形化界面;②支持对没有登录的聊天室成员发送聊天记录;③支持查找历史聊天纪录;
----------------
以上是老师给出的原封不动的要求
这个课程设计不难,功能不要求多,但是有些方面不是很明白,感觉想做的好点也不容易~
以下是我的打算
1.界面用QT去做(qt尚不熟悉,打算临时学几手,做出个界面应该不成问题),但是多线程和网络这两块必须是直接调linux的api,否则也就不叫linux课程设计了。
2.服务端是做成一个单独的程序(运行时,先启动服务端,然后客户端之间才能通信,必须依赖于固定的服务端),还是服务端和客户端集成在一起(启动时,若发现当前局域网不存在服务器就自己启动一个服务器,若存在,就直接连接服务器)?我更倾向于后者,因为这个小程序的服务端肯定不会太庞大,服务端和客户端集成在一起比较灵活~
3.支持群聊和私聊,群聊的话,消息经过服务器转发,服务器和客户端都保存聊天记录,。私聊就两个客户端直接通信,聊天记录只保存在本地。
4.对没有登录的成员发送聊天记录,这个应该比较简单,客户端上线后,服务器直接将保存在群聊记录发给它。
5.查找历史聊天记录,这个就暂时直接读取本地保存的聊天记录吧
------------
基于以上打算,会产生以下问题,该如何解决?
首先是第2点,服务端和客户端集成在一起,如果当前是服务器的那个用户退出了(或者程序意外终止)怎么办?整个系统的运行必须要有服务端的支持才行的。可以考虑这个时候按照一个协议在其余的用户中协商出一个用户作为服务端。。。不过感觉这样,整个系统的复杂度就大大增了,而且原先的服务器上保存的群聊记录就不能使用了~对于要求中的第二点的实现又会产生影响!
还有就是,飞秋,飞鸽传输之类局域网聊天软件是如何实现的?以前自己在windows上写过类似于这个课程设计的小程序,客户端上线后直接向指定的端口广播UDP消息,其它客户端应答,这样就能构建一个当前在线用户的列表,然后每个客户端就能直接通信,不要服务端的存在。但是如果在用户很多的情况下,感觉通过这样的方式来构建和更新在线用户列表太得不偿失了~,通过服务端来维护在线用户列表更实际些。
如果服务端作为一个单独的程序运行的话,上面的大部分问题可轻松解决,但是。。。。我想让程序更灵活,不依赖于固定的服务器就能使用。
-------------
最后,有木有一些合适的源码推荐给我参考下的~
|
不要傻拉,要有一个独立的服务端的拉,像QQ也是啊,我们要给好友发送的消息都是先发给服务端的,再通过服务端发送给你的好友...开发软件就得这样啊,类似这类的软件就要追求服务端多做点事,客户端的压力少点,也就是用户用起来简单点,程序小点 负担小点....而且说真的,开发起来也比较方便啊,思路比较清晰...
不依赖于固定服务器就能使用,并没有比较灵活拉,而且安全性不好...你说的内容很多,我没全部看完,一点点个人见解而已,仅供参考.
不依赖于固定服务器就能使用,并没有比较灵活拉,而且安全性不好...你说的内容很多,我没全部看完,一点点个人见解而已,仅供参考.
|
先做一个能打印出客户端信息的模型出来吧,再谈 界面版本的。
我想的是,需要服务器和客户端两部分,服务器socket接收客户端的udp数据报,然后打印出来。
至于客户端自己输入的信息如何回显给自己的,还得再想想 呵呵
我想的是,需要服务器和客户端两部分,服务器socket接收客户端的udp数据报,然后打印出来。
至于客户端自己输入的信息如何回显给自己的,还得再想想 呵呵
|
我也在做这个东西,但是比楼主的要求简单多了,只是能完成两台主机之间的图形界面通信就行。现在我写的UDP程序能够在终端上正常通信。GTK也学了点,但是目前来说我遇到的问题是,怎样能在图形界面上聊天,关键技术是什么?
还希望能有人给指点一下~
还希望能有人给指点一下~
|
只在window上玩过 通信
|
xmpp协议,开源的im很多
|
IM 很好啊