Linpop

最近在东软实训,做了一个Linux下的即时聊天软件,名字是linpop,其实这个东西没有什么新意,一届又一届的学长们都做过

不过收获还是很大的,能有一个系统的项目锻炼一下子自己,是个不错的机会,从需求分析,概要设计,详细设计,再到编码,到调试,其中能收获到太多书本上,课堂上学习不到的只是,不过前提是要你真的做了。

知识就是这样,只要你做了才是你自己的,看了的东西,几天就会忘记。但是经历过的就不一样了,你的思路会一直跟随着你。

也在此给想真的学东西的同学一个建议,学什么都要动手,做出来,那知识才是自己,不要只看,不动手。

回到正题,说一说linpop

它的定位是一个及时聊天软件,局域网的,在项目启动的时候,有两个选择,一个是c-s架构,另一个则是点对点的聊天,从实用的角度讲,点对点,没有服务器的是最完美的,但是从学知识的角度讲,还是做c-s结构的,能接触的更多一些。

再说一下这里面的知识点:

1、GTK+ or QT:用来做图形界面,我用的是GTK,因为以前没接触过,所以很好奇,用过了之后,发现,GTK是个挺有意思的东西,难度也不是很大, 对有基础的同学来说就是小菜,但是要想精通它也不是一件容易的事。

关于这个项目,里面有几个难点,写出来,希望以后的人少走点弯路:

其一就是gtk的线程,在gtk与socket交互的时候,如果没有用gtk的线程函数,很容易造成gtk假死,不能刷新,从而造成系统崩溃。

其中几个关键函数:

gtk_threads_init();

gtk_threads_enter();

gtk_threads_leave();

上面的第一个函数是用来初始化的,后两个函数联合实用,在交互的时候一个放在头部,一个放在结尾,能保证这之间的gtk界面更新正常进行,不会假死。

编译的时候,不要忘记了加上-gthread-2.0

还有一点就是,聊天窗口界面,要定义一个结构体,把里面的textview等需要全局应用的控件提取出来,然后存在一个全局的链表中,这样就能打开多个窗口并且之间的数据不冲突了。

2、多线程:无论是服务器端接受数据,还是客户端接收、发送数据,多线程都是一个很好的选择,有人会问,为什么不用进程呢,因为多线程能够共享数据,少占用资源,更方便。

说多线程,就要提到线程的属性,其中有一个属性叫做线程分离。这可是一个好东西,具体怎么用,百度一下,各种资料。记得有什么问题多利用搜索引擎,他是一个最好的老师,永远不会烦你。

3、socket:这个就是这个项目的精髓所在,怎么设计socket的通信过程,每个人都有自己的想法,我的方法是把消息封装成一个结构体,里面有各种状态位,用来区别消息的内容,socket之间传的值就是结构体。只是给大家一个建议,谁有更好的方法,说出来分享一下啊。

4、数据库:这个东西非常好,提倡实用,把用户的各种信息存在里面,写一些操作函数,会使你的工作量减少很多,甚至于你都可以把连接的socketid存在数据库里面。一句话,用好数据库,你的工作会变得特别简单。因为数据库什么都能存,甚至文件。

5、文件操作:这是c语言的基础,所有的本地信息,你都可以存在文件中,什么聊天记录,甚至于好友列表,你都可以存在文件中,当有好友信息更新的时候,你把文件发到数据库备份一份,如果没有更新,那你就大胆的在文件中读吧,肯定没错。

 

我的正题思路就是,客户端发送消息给服务器,服务器响应,然后回传给客户端,或者转发到其他用户。

 

以上提供的都是思路,说的也不详细,仅供参考。代码就不发上来了,一直觉得分享简单的代码很害人的,如果有人十分想要,发个邮件给我,我会发给你的。

转载于:https://www.cnblogs.com/PrideTse/archive/2011/09/16/pridetse.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值