基于java套接字的实现多点互动通讯系统内容摘要:

检查用户的输入数据,显示应用的输出数据。 为了使用户能直接地进行操作,客户层需要使用图形用户接口。 [6]若通讯用户变更,系统只需要改写显示控制和数据检查程序就可以了,而不会影响其他两层。 服务层又叫做功能层,相当于应用的本体,它是将具体的业务处理逻辑编入程序中。 例如,用户需要检查数据,系统设法将有关检索要求的信息一次性地传送给功能层;而用户登录 后,聊天登录信息是由功能层处理过的检索结果数据,它也是一次性传送给表示层的。 在应用设计中,必须避免在表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理,达到优化整体设计的目的。 图 1 二层 C/S 结构示意图 功能设计 该多点互动通讯按如下过程完成通讯: (1)用户向服务器注册; (2)用户注册之后,向服务器发送消息; (3)服务器再把消息发送给相应的用户。 根据以上描述,该系统功能模块图如图 2 所示 图 2 多点互动通讯功能模块图 服务器端功能设计 在服务器端的 程序具有以下的功能实现: (1)开启服务器程序,进行监听,接收客户端连接。 (2)接收消息、分析消息、转发消息。 (3)关闭服务器端的程序,并向所有已连客户端发送服务器端程序已关闭消息。 客户端功能设计 在客户端的程序必须具有以下的功能实现: (1)用户注册。 (2)请求连接服务器,并把此用户登录请求发给服务器端。 (3)随时可以向服务器发送消息。 (4)随时可以接收服务器端转发过来的消息。 (5)响应服务器端程序已关闭消息。 界面设计 服务器端功能设计 在服务 器端的界面设计实现:有两个按钮,分别是开启服务和停止服务,把这两个按钮放入一个面板中,然后把此面板放入到窗体中。 此界面能实现服务器端的服务开启和停止的功能。 客户器界面设计 在客户端设计了五个界面:登入界面、注册界面、好友界面、聊天界面、修改密码界面。 (1)登录界面设计实现:在登录界面中有两个输入框,能实现用户账号和密码的输入,并且密码输入是不可见的。 还有三个按钮:登录、取消、注册向导。 (2)注册界面设计实现:当点击登录界面登录按钮时,进入注册界面。 注册界面能实现用户输入申请的账号,设置 密码。 还设计有注册和返回按钮来方便使用者的操作。 (3)好友界面设计实现:登录成功后,进入好友界面。 好友界面有:我的好友、陌生人、黑名单三个按钮。 当点击我的好友时,能实现我的好友列表,当点击陌生人时,能实现陌生人列表。 (4)聊天界面设计实现:当双击列表中某好友时,跳出与此好友聊天的界面。 聊天界面包括:聊天内容显示、输入聊天信息、发送聊天信息。 (5)修改密码界面设计实现:当在登录界面点击修改密码时,进入修改密码界面。 修改密码界面能实现输入账号、原有密码和需要修改的密码。 还设计有修改密码和返回按钮来方 便使用者的操作。 6详细设计 服务器端详细设计 界面设计 在 java 程序中,我们可以通过自己编写的类继承 JFrame 类的方法实现要创建的窗体。 当我们用到 JFrame 类,我们需要导入 .*和 .*。 我们要在窗体内加入一个装有控制按钮的面板 (JPanel)。 关键代码如下: jPanel_show=new JPanel()。 jButton_start=new JButton(。 启动服务器。 )。 (this)。 jButton_stop=new JButton(。 关闭服务器。 )。 (this)。 (jButton_start)。 (jButton_stop)。 (jPanel_show)。 功能模块的实现 本系统在 C/S 模式下进行开发,所以服务器端的程序设计至关重要。 下面就服务器端功能进行设计。 服务器端界面有 两个按钮,分别是 jButton_start 和 jButton_stop。 当点击 jButton_start 时,跳出是否开启服务器的对话框。 点击确定时显示服务器启动对话框,服务器启动后通过 ServerSocket Serve_socket =new ServerSocket(9898)语句在服务器 9898 端口进行监听操作。 监听通过()语句返回一个连接客户端的 Socket。 关键代码如下: Serve_socket = new ServerSocket()。 //有连接则返回此套接字的连接 . socket=()。 接收到客户端 User 后判断为登录操作时,则通过 UserDao 类中的()方法判断 MYSQL 数据库中是否有此用户,有则把 Message 的类型设为 ,然后通过 ()把此消息发给客户端,并用 new SerConClientThread(socket)为此用户开一个服务器端的线程为此用户服务,并加入到服务器线程类里面 去, SerConClientThread 类可以实 现 用 户 消 息 接 收 、 消 息 分 析 、 消 息 转 发 , 通 过(())通知其它在线好友此用户上线。 没有则把 Message 的 类 型 设 为 , 然 后 通 过()把此消息发给客户端,并且关闭此 Socket。 关键代码如下: if(().equals(。 userLogin。 )) { if(().equals((()))) { //return Login suceess ()。 //返回给用户一个登入成功的消息 (m)。 //这里就单开一个线程,让该线程与该客户端保持通信 . SerConClientThread Serve_thread=new SerConClientThread(socket)。 ((), Serve_thread)。 //启动与该客户端通信的线程 . ()。 // notify Other who online (())。 } else { //表明 Fail Login ()。 (m)。 //关闭 Socket ()。 } } 接收到客户端 User 后判断为注册标志时,则得到用户要注册的用户账号,通过 ()方法查找 MYSQL 数据库中是否有此用户账号,有则把Massage 的类型设为注册不成功标志。 通过 ()把此消息发给客户端,发完后关闭在服务器端的此用户连接的 Socket;没有则在服务器端 User表中加入此用户,然后把 Massage 的类型设为注册 成功标志,通过()把此消息发给客户端,发完后关闭在服务器端的此用户连接的 Socket。 关键代码如下: if(().equals(。 userRegister。 )) { if(((), (), ())) { (。 registerSuccess。 )。 } else (。 registerFail。 )。 (m)。 //写入消息 ()。 }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。