自己的第一个程序 — QT聊天软件 小感

      其实当初师兄给我这个任务的时候还是在2010年的11月份。那个时候刚到项目上的我超级自信,总认为只要自己想做,稍微看下书,动下手就可以写出来了。所以当师兄问我多久可以做好的时候,我开始满怀信心的说一个星期,后来细想下有点悬,说还是2个星期吧。于是还很慎重的写了每天的工作任务计划。

     聊天软件的功能需求:

     1.实现一个客户端,一个服务器端

     2.客户端连接服务器,服务器返回一个所有在线的用户列表;

        客户端单击列表特定的一个条目,会弹出一个对话框;

       客户端在对话框中输入消息,会通过服务器转发到这个对应的客户端那边。

    3.服务器端启动的时候读取配置文件,监听某个绑定的端口;

        接受服务器的各种请求信息,保存它的基本登录信息;

        客户端登录成功后,向客户端返回所有的在线客户端基本信息;

        接收客户端的信息并给指定的客户端进行转发。  

     直到下来才发现,自己要做一个类QQ的聊天软件太难了,很多东西要学~ 自己很多的重复设计和工作真的是。。。。我回忆着列下:

   1.刚开始的时候对qt很有抵触,总想用自己熟悉点的C语言写,于是就在用unix上面的网络编程程序进行实现,后来服务器写的差不多了,要写客户端的时候,发现界面的实现根本就离不开qt。而且关于服务器端对客户端信息的保存和解析C语言实现的话太过于繁琐,几乎每个功能都要我自己实现。工程量浩大。

   2.后来准备用C语言+qt完成这个软件,但是发现因为2个很多的数据类型都不通用,所有很多地方要进行不必要的甚至是重复的类型转化。

   3.第一次写这么大的一个软件,最终我还是决定使用封装性比较好的qt,加上这个也是项目上的主语言,刚好是一个很好的学习机会。

 我的类qq软件的设计:

   传输协议的设计:

   enum MessageType{Message,NewParticipant,ParticipantLeft,Login,Request};  各种协议头

   在发送出去的数据流里面包含的信息

   发送的总的字节长度+文件头+这种信息类型传送的内容

   客户端的

   1.几个大类:

    login:qt类,用来实现登录窗口,并在其中获取用户名

  buddy:qt类,用来实现客户端的列表呈现

       其中的两个方法:insertItem()     //用于在列表中添加用户条目信息

                                   itemClick()    //用于找出特定的用户,并存储其信息进行通信

    chat:qt类,用来实现对话窗口

  client1:(因为不断的重复写,最终竟然把它命名为这个了。。真惭愧)

      用来定义客户端用户的基本信息,以及调用其他的几个类

2  .最要注意的是Qmap容器来存储我的用户信息列表,和对话窗口编号,这对于信息的正常传输很重要

     QMap infoBuddy;  // id and name of the buddy
     QMap pairlist;

服务器端:
     根据设计的传输协议对客户端的数剧进行接收,同时要保证每个客户端有自己一个对应的Socket不会重复
     服务器端每接收到一个新的连接,就会产生一个新的Socket并给用户存储起来供其以后专用。 
 
 
      要说各种细节,真的是太多了。想想整个过程,我竟然被折磨了快2个月之久,但是嘿嘿 当然也不是纯做它了,还要耍的嘛,不过真的在其中学到了很多,关于C++的结构设计啊,对象的使用啊,还有我学习qt类的使用啊 真的都熟练了很多,现在也才理解了什么叫做大家常说的“瓶颈”,就是到了那个时候撞破脑袋也难出来的东西。。。。。
      总之,还好是一个好的开始,在想着如果这个东西写不完,我都不好意思回家过年了。哈哈~ 只是这个过程中当然还是要感谢一直帮助引导我的师兄(其实他后来都对我无语了),后面呢,也希望自己能够继续对它进行完善:
  连接数据库;或者用epoll;还有多线程实现的  都有~  一步步来吧  哈哈  就到这吧~~~

你可能感兴趣的:(QT学习)