zoukankan      html  css  js  c++  java
  • 通信——基于Xmpp协议实现的聊天室

    前段时间写了个自定义通信协议的聊天室(即用 标记字符串,作为一句话),总感觉自己弄的那个协议实现虽然简单,但是拓展性就太差了,只适合于发送聊天的内容,难以包含更多的信息。基于上述几点,于是就开始接触Xmpp协议,并自己定义了一个简单的Xmpp协议用以实现聊天室。 

    首先有2点要知道: 
    1.什么是Xmpp协议? 
      Xmpp协议是一种通信协议,有自己的规则,即用Xml格式的消息进行通信。 
    2.Xml串的例子。 
      <msg><name>laoyang</name><msg> 
      上述是一条完整的Xml消息,首尾由<msg></msg>标识,里面就是消息的内容,不同的内容用不同的标签来标识,如<name></name>,然后name包含的内容,即名字就是laoyang 

      然后,这次不同于上次的是,我自己对这个聊天室做了一番分析,然后再实现的。 

    分析: 
    一.需求分析: 
    S.服务器: 
    启动|暂停服务器,对所有用户发送通知,对某个用户发送私信,实时显示在线用户列表,踢掉某个用户 
    C.客户端: 
    能注册账号,能登陆,可以向某个用户发送消息,可以向所有人发送消息,实时显示在线用户列表 
    二.C/S通信流程: 
    A:注册(C------>S) >>>>> 注册应答(S--------->C)>>>>>> 返回登陆界面

    B:登陆(C--------->S) >>>>>>> 登陆应答(S--------->C)>>>>>>> (失败)返回登陆界面,(成功)进入聊天界面&&上线消息(S------->C&&发送在线用户表(S------------>C) 

    C:聊天(C--------->S------------>C) 

    D:下线 >>>>>> 发送下线消息(S--------->C)>>>>>>> 发送在线用户表(S---->C) 
    三.Xml串的种类: 
    a. 注册消息: <msg><type>register</type><IDcode>idnumber</IDcode><password>psw</password><username>name</username></msg> 
    b. 注册应答消息:<msg><type>regAns</type><answer>state</answer></msg> state:注册成功或者注册失败 
    c. 登陆消息:<msg><type>login</type><IDcode>idnumber</IDcode><password>psw</password></msg> 
    d. 登陆应答消息:<msg><type>loginAns</type><answer>state</answer><msg> state:登陆成功或者登陆失败 
    e. 聊天消息:<msg><type>chat</type><sender>name</sender><reciver>name</reciver><content>message</content></msg> 
    f. 上线消息:<msg><type>online</type><content>cnt</content></msg> 
    g. 下线消息: <msg><type>offline</type><content>cnt</content></msg> 
    h. 在线用户表: <msg><type>onlinelist</type><list>user1,user2,user3.....</list></msg> 
    i. 终止用户聊天的消息<msg><type>exit</type></msg> 
    四.关于类的结构的分析(由于内容有点多,所以放在附件的文本中,此处不再写出) 

    部分图片:  


     

     

     


    感想: 
    1.做软件,最重要,最关键的一步在于设计,所以在开始写代码前,一定要先分析需求,然后还要对如何实现做一个具体的分析与设计。 
    2.要进行通信,必须要有通信协议,做通信软件,必须要选择合适的通信协议。 
    3.测试软件性能时,要考虑各种意外情况的发生,比如:突然断网,服务器那边突然停电,So on....,这时要把异常处理的工作给做好。 

    展望: 
    本人也是个铁杆Dotaer,所以下一步的打算是做一个对战平台,上网搜了下原理,也看了下别人做的对战平台,觉得还是能够自己实现的,不过以后的日子就苦逼啦。 TCP/IP的书必须要去看了,对战平台的需求分析必须要去做了。 

    最后,附上源码和相关的文本(相关分析的文件用记事本打开就可以)
  • 相关阅读:
    web.config中httpRedirect
    时间复杂度O(n)与空间复杂度O(1)
    NserviceBus过期处理
    struts的生命周期
    myeclipse 更改字体
    研磨struts2地址
    jQuery 实现公告无缝滚动
    统计网站访问图形数据链接
    工作经常使用的SQL整理
    使IE6下PNG背景透明的七种方法
  • 原文地址:https://www.cnblogs.com/wangluochong/p/7209112.html
Copyright © 2011-2022 走看看