基于tcpip的局域网聊天室的设计与实现内容摘要:

时间, 在此期间通过自己学习和查阅图书以及询问老师 获得相关知识和方法,并 没有其他的支出,而且 现阶段只做学习 暂且不考虑经济成本及盈利问题。 技术可行性分析 首先我已经搭建好开发所需要的软硬件平台,并进行了合理而完善的需求分析,做好了充分的前期准备工作,其次因为本程序的平台将基于 WINDOWS,将要使用网络通信技术,而 WINDOWS 有完善成熟的网络通信接口,以及与 JAVA 开发环境的严密契合能力,加之相类似的更大规模的 INTERNET 通信工具产品也已基于 TCP/IP 的局域网聊天室的设计与实现 6 有 例在先,所以这个程序的开发可行性在技术上是完全可行的。 系统开发环境的分析 系统采用 JAVA 作为开发语言、 Eclipse 作为开发工具,系统的设计从需求分析开始,就保证了系统的稳定性和可扩展性。 JAVA 语言是一种面向对象的编程语言,具有很好的移植性、并且更加的安全 和并发性,这使得 JAVA 语言各线程能够并发进行。 并且 JAVA 支持可视化图形界面,使得操作更加直观。 数据流图 顶层数据流图 聊 天 用 户局 域 网 多人 聊 天 系统聊 天 用 户 图 22聊天系统顶层数据流图 一 层 据流图 聊 天 用 户 聊 天 用 户客 户 端服 务 器 端写 聊 天 信 息返 回读 取返 回提 交反 馈存 储 图 23 聊天系统一层数据流图 基于 TCP/IP 的局域网聊天室的设计与实现 7 第 3 章 系统设计 设计目标 同一个局域网中, 如何根据自身业务的要求,量身定制,选择一套 有效的局域网聊天室 系统。 如何来满足局域网内部用户的通讯要求,在考虑到网络传输实时性,这现代社会通讯所必需的。 设计本系统时,分析网络承载、整个系统结构的组建等是实现局域网文字聊天所必需的。 局域网聊天作为一种广泛的网络应用对其基础的承载网络环境的要求较低。 局域网聊天的功能和应用效果体现在客户端,而服务器端则是必 不可少的,对于系统的需求分析在系统设计的过程中应该明确、细致: 1. 用户登录:设立一个服务器,实现多个用户及时通信。 用户在登陆时候输入明确的用户名称,以便各用户之间能够识别。 2. 文本聊天:聊天室的功能即所谓的群聊,聊天的内容所有的人都能够看到,保密聊天室的功能即所谓的私聊,只有聊天双方才能看到。 用户还可以对字体进行修改。 3. 文件传输:多线程,收发可随时进行,相互之间没有相互影响 ,文件传输速度快。 构建开发环境 硬件平台 CPU:。 内存: 256MB 以上 软件平台 操作系统: windows XP 或 window 7 开发工具包: Eclipse 开发环境: JVM 分辨率:最佳效果 1024*768 像素 系统模块流程图 基于 TCP/IP 的局域网聊天室的设计与实现 8 局域网聊天室 文字聊天 业务流程图如图 31 所示。 图 31系统 文字聊天 业务流程图 发送文件的流程为:用户添加文件向接收端发送文件传输请求,如果同意接收后,则启动计时器,发送文件流,反馈状态,否则继续添加文件,重复操作。 接收文件的流程为:服务器端执行接收线程,接收发送端传来的文件,并把 它保存。 开始 连接服务器 建立连接容许发送消息事件,启动服务器线程 进行文字消息通信 服务器同意连 接。 是否断开连接 发送断开信号,关闭文本聊天 终止 Y Y N N 基于 TCP/IP 的局域网聊天室的设计与实现 9 局域网聊天室 文件发送 业务流程图如图 32 所示。 图 32系统 文 文件传输 业务流程图 系统功能模块图 局域网聊天室功能模块 图如图 32 所示 : 33局域网聊天室功能模块 客户端 用户登陆 主体框 对话框主体 登陆验证 N Y 服务器 记录用户登陆和显示当前在线用户 发消息 发送消息 主窗体 发消息 对话框窗体 TCP/UDP 协议 服务器端 客户端 基于 TCP/IP 的局域网聊天室的设计与实现 10 第 4 章 基于 Eclipse 的聊天室的分析与设计 TCP 套接字的运用 在文字聊天时 ,服务器端与客户端的连接是采用的 TCP 套接节进行连接。 TCP套接字的使用如图 41。 创建 Socket 对象 SocketServer 来处理服务器 端与客户端的连接, Socket 是 Windows Socket API 的高层抽象。 Socket 通常和 其他类 类混合使用,这两个类负责数据的发送和接收 [17]。 要使用 Socket 对象,首先要调用构造函数,然后调用 Create 函数创建一个 Socket[9]。 Socket 和 TCP 的工作流程如下图所示 : 图 41 TCP套接字的使用 基于 TCP/IP 的局域网聊天室的设计与实现 11 TCP 三次握手协议 第一次握手: 源 主机 通过 发送一个 数据 帧来 请求 本次 的 连接。 第二次握手: 当 目的主机收到 源主机发送的这个请求 帧 之后 ,发送一个带有源端机连接序列号 和 本次连接序号 的确认 帧表示同意连接。 第三次握手: 源端机等待接收两次初始应答的序列号之后 , 就 向目的主机发送一个带有两次连接序列号的确认 [10]。 具体过程如下: 主机 A 主机 B 图 42 网络传输的三次握手 程序结构 多用户在线方案: 采用客户端 /服务器( C/S) 的和 JAVA 中多线程结构模式。 服务器通过监听来判断是否有客户端请求登陆并予以响应 , 而客户端则是在需要登陆时候提交登陆请求以便服 务器进行监听。 服务器通常情况下是始终运行的 , 用来 监听 各个 网络端口,一旦 收到客户端的 请求, 就需要立即启动一个进程来响应客户端的服务。 于此同时,服务器还将 继续监听服务 的各个 端口,以便 后来的 客户端 也能及时的接收到 响应。 在这个过程中,很多线程被创建,线程的轮转是有时间片限定的,而这个时间片非常的小,对于客户端来说基本感觉不到,就像所有的线程都是在同时进行的 [10]。 多线程的工作原理如下图所示: ACK=1 第一次握手,主机 A 向主机 B 发送连接请求 第二次握手,主机 B 收到主机 A的请求,向主机 A回发一个确认,同时向主机 A 发送一个连接请求 第三次握手,主机 A 收到主机 B 发送的数据包在向主机 B 发送一个确认连接 SYN=1,SEQ= ACK=1,SYN=1,SEQ= aaaaaaaaaa 基于 TCP/IP 的局域网聊天室的设计与实现 12 图 43 多线程在线 软件框架 Users SendOne SendAll FileTrans UserList Connect Client Server TCP Socket 图 44 软件主题框架 代码实现 用户登陆模块 图 45用户登陆模块 客户端 登陆模块部分主要代码如下 : class Connect extends JFrame implements ActionListener, ItemListener, { public void link() throws Exception { // 连接服务器 hostName = ().trim()。 port = (())。 client = new Socket(hostName, port)。 // 创建一个流套接字并将其连接到指定 IP 地基于 TCP/IP 的局域网聊天室的设计与实现 13 址的指定端口号。 in = new BufferedReader(new InputStreamReader(()))。 out = new PrintWriter(())。 (() + amp。 + sex)。 ()。 } } 服务器 端登陆模块部分主要代码如下: public static void addConnection(Socket s, ClientProc cp) {if (connections == null) {connections = new VectorSocket()。 } (s)。 if (clients == null) {clients = new VectorClientProc()。 } (cp)。 } public static void deleteConnection(Socket s, ClientProc cp) throws IOException {if (connections != null) {(s)。 ()。 } if (clients != null) {(cp)。 }} public static Vector getClients() {return clients。 } 用户列表模块 图 46 在线好友主界面 客户端 用户列表部分代码如下 : public void valueChanged(ListSelectionEvent e) 基于 TCP/IP 的局域网聊天室的设计与实现 14 {// 监听下拉列表的显示内容 if (() =。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。