基于java的局域网聊天系统.doc

上传人:h**** 文档编号:127672 上传时间:2018-07-09 格式:DOC 页数:136 大小:1.57MB
下载 相关 举报
基于java的局域网聊天系统.doc_第1页
第1页 / 共136页
基于java的局域网聊天系统.doc_第2页
第2页 / 共136页
基于java的局域网聊天系统.doc_第3页
第3页 / 共136页
基于java的局域网聊天系统.doc_第4页
第4页 / 共136页
基于java的局域网聊天系统.doc_第5页
第5页 / 共136页
点击查看更多>>
资源描述

1、 1 目录 1 引言 . 2 1.1 课题要求及目标 . 2 1.2 开发目标 . 6 2 系统总体设计 (针对一个完整的题目) . 7 2.1 用例图及用例描述 . 7 2.2 系统结构 . 9 3. 系统详细设计与实现 .11 3.1 引言 .11 3.2 程序系统的结构 .12 3.3 类级说明 .13 3.4 函数级说明 .2 4 总结 . 36 4.1 运行结果 .37 4.2 测试与分析 46 5 任务分配表 . 错误 !未定义书签。 参考文献 . 46 2 1 引言 1.1 课题要求及目标 ( 1) 课题要求 软件名: 网上聊天 系统(分服务器端和客户端两部分) 功能: 使用 W

2、insock 实现网上聊天功能(实现时可在一台机器上调试运行)。用户可以通过客户端连接到服务器端并进行网上聊天。当然,聊天时可以启动多个客户端。 编程语言: java 硬件平台 CPU:Pentium4 以上 内存: 128M 以上 软件平台 操作系统: windows 系列, mac 系列, linux 等 开发工具 : Eclipse, JDK6 描述: (1)实现群聊和私聊; (2)实现文件的发送与接收; (3)实现截图功能; (4)实现用户列表的维护 。 (5)实现字体的改变 ( 2) 开发技术 Socket 的编程模型如图 1 所示。 图 1 Socket 的编程模型 3 字节流套接

3、字 (Stream Socket) 是最常用的套接字类型, TCP/IP 协议族中的 TCP 协议使用此类接口。字节流套接口提供面向连接的、无差错的、发送先后顺序一致的、无记录边界和非重复的网络信息包传输。其模型如图 2 所示。 数据报套接字 (Datagram Socket) TCP/IP 协议族中的 UDP 协议使用此类接口,它是无连接的服务,它以独立的信息包进行网络传输,信息包最大长度为 32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。数据报套接口的一个重要特点是它保留了记录边界。其模型如图 3 所示。 原始数据报套接字 (Raw Socket)

4、 提供对网络下层通讯协 议 (如 IP 协议 )的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或用于提取协议较隐蔽的功能。 图 2 面向连接的 SOCKET 编程模型 4 图 3 面向非连接的 SOCKET 编程模型 Windows Sockets 规范中定义了一个新的数据类型 SOCKET,这一类型的定义对于将来Windows Sockets 规范的升级是必要的。这一类型的 定义保证了应用程序向 Win32 环境的可移植性。因为这一类型会自动地从 16 位升级到 32 位。 ( 3) 程序开发环境和开发语言 创建套接字 socket() 应用程序在使用套接字前,首先必须拥有一个

5、套接字,系统调用 socket()向应用程序提供创建套接字的手段,其调用格式如下: SOCKET socket(int af, int type, int protocol); 该调用要接收三个参数: af、 type、 protocol。参数 af 指定通信发生的区域, UNIX系统支持的地址族有: AF_UNIX、 AF_INET、 AF_NS 等,而 DOS、 WINDOWS 中仅支持AF_INET,它是网际网区域。因此,地址族与协议族相同。 参数 type 描述要建立的套接字的类型 。若取 SOCK_STREAM 表示要创建的套接字是流套接字,取 SOCK_DGRAM 创建的是数据报套

6、接字,取 SOCK_RAW 表示创建原始套接字。 参数 protocol 说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为 0,使用默认的连接模式。 若套接字创建成功则该函数返回所创建的套接字句柄 SOCKET ,否则产生INVALID_SOCKET 错误。 指定 本地地址 bind() 当一个套接字用 socket()创建后,存在一个名字空间 (地址族 ),但它没有被命名。 bind()5 将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。其调用格式如下: int bind(SOCKET s, const s

7、truct sockaddr* name, int namelen); 参数 s 是由 socket()调用返回的并且未作连接的套接字描述符 (套接字号 )。 参数 name 是赋给套接字 s 的本地地址,它由 struct sockaddr 结构表示, namelen 表明了name 的长度。 如果没有错误发生, bind()返回 0。否则返回值 SOCKET_ERROR。 sockaddr 结构随选择的协议不同而变化,因此一般情况下另一个与该地址结构大小相同的 sockaddr_in 结构更常用, sockaddr_in 结构用来标识 TCP/IP 协议下的地址,并可以方便地通过强制类型转

8、换将其转换为 sockaddr 结构, sockaddr_in 的格式如下: struct sockaddr_in short sin_family; /*AF_INET*/ u_short sin_port; /*16 位端口号 */ struct in_addr sin_addr; /*32 位 IP 地址 */ char sin_zero8; /*保留 */ 监听连接 listen() 此调用用于面向连接服务器,表明它愿意接收连接。 listen()需在 accept()之前调用,其调用格式如下: int listen(SOCKET s, int backlog); 参数 s 标识一个本

9、 地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。backlog 表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为 5。如果没有错误发生, listen()返回 0。否则它返回 SOCKET_ERROR。 listen()在执行调用过程中可为没有调用过 bind()的套接字 s 完成所必须的连接,并建立长度为 backlog 的请求连接队列。 调用 listen()是服务器接收一个连接请求的四个步骤中的第三步。它在调用 socket()分配一个流套接字,且调用 bind()给 s 赋于一个名字之后调用 ,而且一定要在 accept()之前调用。 建立套接字连接

10、connect()与 accept() 这两个系统调用用于完成一个完整相关的建立,其中 connect()用于建立连接。无连接的套接字进程也可以调用 connect(),但这时在进程之间没有实际的报文交换,调用将从本地操作系统直接返回。这样做的优点是程序员不必为每一数据指定目的地址,而且如果收到的一个数据报,其目的端口未与任何套接字建立 “连接 ”,便能判断该端口不可操作。而 accept()用于使服务器等待来自某客户进程的实际连接。 connect()的 调用格式如下: int connect(SOCKET s, const struct sockaddr * name, int namel

11、en); 参数 s 是欲建立连接的本地套接字描述符。 参数 name 指出说明对方套接字地址结构的指针。对方套接字地址长度由 namelen 说明。 如果没有错误发生, connect()返回 0。否则返回值 SOCKET_ERROR。在面向连接的协议中,该调用导致本地系统和外部系统之间连接实际建立。 由于地址族总被包含在套接字地址结构的前两个字节中,并通过 socket()调用与某个协议族 相关。因此 bind()和 connect()无须协议作为参数。 accept()的调用格式如下: SOCKET accept(SOCKET s, struct sockaddr * addr, int

12、FAR* addrlen); 参数 s 为本地套接字描述符,在用做 accept()调用的参数前应该先调用过 listen()。 addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。 addr 的确切格式由套接字创建时建立的地址族决定。 addrlen 为客户方套接字地址的长度(字节数)。 如果没有错误发 生, accept()返回一个 SOCKET 类型的值,表示接收到的套接字的描述符。否则返回值 INVALID_SOCKET。 accept()用于面向连接服务器。参数 addr 和 addrlen 存放客户方的地址信息。调用前,参6 数 addr 指向一个初始值为空的地址结构

13、,而 addrlen 的初始值为 0;调用 accept()后,服务器等待从编号为 s 的套接字上接受客户连接请求,而连接请求是由客户方的 connect()调用发出的。当有连接请求到达时, accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入 addr 和 addrlen,并创建一个与 s 有相同特性的新套接字号。新的套接字可用于处理服务器并发请求。 四个套接字系统调用, socket()、 bind()、 connect()、 accept(),可以完成一个完全五元相关的建立。 socket()指定五元组中的协议元,它的用法与是否为客户或服务器、是否面向连接无关。 bin

14、d()指定五元组中的本地二元,即本地主机地址和端口号,其用法与是否面向连接有关:在服务器方,无论是否面向连接,均要调用 bind();在客户方,若采用面向连接,则可以不调用 bind(),而通过 connect()自动完成。若采用无连接,客户方必须使用 bind()以获得一个唯一的地址。 以上讨论仅对客户 /服务器模式而言,实际上套接字的使用是非常灵活的,唯一需遵循的原则是进程通信之前,必须建立完整的相关。 数据传输 send()与 recv() 当一个连接建立以后,就可以传输数据了。常用的系统调用有 send()和 recv()。 send()调用用于在参数 s 指定的已连接的数据报或流套接

15、字上发送输出数据,格式如下: int send(SOCKET s, const char *buf, int len, int flags); 参数 s 为已连接的本地套接字描述符。 buf 指向存有发送数据的缓冲区的指针,其长度由 len 指定。 flags 指定传输控制方式,如是否发送带外数据等。如果没有错误发生,send()返回总共发送的字节数。否则它返回 SOCKET_ERROR。 recv()调用用于在参数 s 指定的已连接的数据报或流套接字上接收输入数据,格式如下: int recv(SOCKET s, char *buf, int len, int flags); 参数 s 为已

16、连接的套接字描述符。 buf 指向接收输入数据缓冲区的指 针,其长度由len 指定。 flags 指定传输控制方式,如是否接收带外数据等。如果没有错误发生, recv()返回总共接收的字节数。如果连接被关闭,返回 0。否则它返回 SOCKET_ERROR。 关闭套接字 closesocket() closesocket()关闭套接字 s,并释放分配给该套接字的资源;如果 s 涉及一个打开的TCP 连接,则该连接被释放。 closesocket()的调用格式如下: BOOL closesocket(SOCKET s); 参数 s 待关闭的套接字描述符。如果没有错误发生, closesocket(

17、)返回 0。否则返回值 SOCKET_ERROR。 ( 4) 每个人自行完成上述任务。 1.2 开发目标 本课程设计目标是实现方便快捷的局域网多人在线聊天系统,人性化的 界面,主要功能如下: (1)实现群聊和私聊; (2)实现文件的发送与接收; (3)实现截图功能; (4)实现用户列表的维护。 (5)实现字体的改变 7 2 系统总体设计 (针对一个完整的题目) 2.1 用例图及用例描述 客户端 服务器端 8 主要用例描述: 用例名: 客户端登录 主要参与者: 用户 概述: 用户通过此用 例连接服务器 交互过程: 1.用户打开客户端 2.用户输入服务器地址,端口 3.输入昵称,性别 4.点击登陆

18、进行登录,触发用例 用例名: 群聊,私聊 主要参与者: 用户 概述: 用户通过此用例与其他用户聊天 交互过程: 1.用户编写聊天信息 2.点击发送按钮即可完成发送 用例名: 文件传送与接收 主要参与者: 用户 概述: 用户通过此用例完成文件传送与接收 交互过程: 1.选择接受者 2.用户点击发送文件按钮 3.选择文件,并发送 4.用户接收文件 9 用例名: 截图 主要参与者: 用户 概述: 通过此用例用户可以完成截图并保存 交互过程: 1.用户点击截图按钮 2.确定截图范围 3.保存 用例名: 保存聊天记录 主要参与者: 用户 概述: 通过此用例用户可以保存并查看聊天记录 交互过程: 1.用户点击聊天记录 2.保存 用例名: 保存日志 主要参与者: 管理员 概述: 通过此用例管理员可以完成保存系统日志 交互过程: 1.用户点击保存日志 2.保存 用例名: 维护用户列表 主要参与者: 管理员 概述: 通过此用例管理员可以完成维护用户列表 交互过程: 2.2 系统结构 服务器 -客户端结构图: 10 小型通信系统 客户端 服务器端 改登录 添管理用户列表 删发送文件 显接收文件 界截图 搜群聊 消私聊 登维护用户列表 I管理用户 打保存系统日志 公保存聊天日志

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。