1、 北京邮电大学软件学院 2010-2011 学年第 1 学期实训项目文档 (每个项目小组一份) 课程名称: 全日制研究生实训 项目名称: 通信软件实训 项目完成人: 姓名: 学号: 姓名: 学号: 姓名: 学号: 姓名: 学号: 姓名: 学号: 姓名: 学号: 指导教师: 日 期: 2011 年 1 月 21 日 基于 java socket 的聊天 室实现 一 . 实训项目 目的 和要求 (说明通过本项目希望达到的目的和要求) 目的:熟练掌握 socket编程原理,并用 java socket实现聊天室 要求:实现 p2p和聊天室功能 二 . 实训项目开发 环境 (说明本项目需要的环境) 开
2、发工具: Eclipse SDK Version: 3.5.2 和 NetBeans 6.9.1 版本 系统: win7 三 . 实训项目 内容 (说明本项目的内容,如:问题分析、设计方案、算法、设计图等) 1.问题分析 网络编程中两个主要的问题一个是如何准确的定位网络上一台或多台主 机,另一个就是找到主机后如何可靠高效的进行数据传输。在 TCP/IP 协议中 IP 层主要负责网络主机的定位,数据传输的路由,由 IP 地址可以唯一地确定 Internet 上的一台主机。而 TCP 层则提供面向应用的可靠( tcp)的或非可靠( UDP)的 数据传输机制,这是网络编程的主要对象,一般不需要关心
3、IP 层是如何处理数据的。目前较为流行的网络编程模型是客户机 /服务器( C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提 出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客 户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也 能及时得到服务。 两类传输协议: TCP; UDP。 TCP 是 Tranfer Control Protocol 的 简称,是一种面向连接的保证可靠传输的协议。通过 TCP 协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个 socket 之间必须建 立连接,
4、以便在 TCP协议的基础上进行通信,当一个 socket(通常都是 server socket)等待建立连接时,另一个 socket 可以要求进行连接,一旦这两个socket 连 接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。 两类传输协议: TCP; UDP。 TCP 是 Tranfer Control Protocol 的 简称,是一种面向连接的保证可靠传输的协议。通过 TCP 协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个 socket 之间必须建 立连接,以便在 TCP协议的基础上进行通信,当一个 socket(通常都是 server so
5、cket)等待建立连接时,另一个 socket 可以要求进行连接,一旦这两个socket 连接起来,它们就可以进行双向数据传 输,双方都可以进行发送 或接收操作。 UDP 是 User Datagram Protocol 的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。 比较: UDP: 1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。 2, UDP 传输数据时是有大小限制的,每个被传输的数据报必须限定在 64KB 之内。
6、 3, UDP 是一个不可靠的协议,发送方所发送 的数据报并不一定以相同的次序到达接收方 TCP: 1,面向连接的协议,在 socket 之间进行数据传输之前必然要建立连接,所以在 TCP 中需要连接 时间。 2, TCP 传输数据大小限制,一旦连接建立起来,双方的 socket就可以按统一的格式传输大的数据。 3, TCP 是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。 应用: 1, TCP 在网络通信上有极强的生命力,例如远程连接( Telnet)和文件传输( FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性 的检验必然占用计算
7、机的处理时间和网络的带宽,因此 TCP 传输的效率不如 UDP 高。 2, UDP 操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中 client/server 应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP 会更合理一些。 2.设计方案 基于 Socket 的 java 网络编程 。 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个 Socket。 Socket 通常用来实现客户方和服务方的连接。 Socket 是 TCP/IP 协议的一个十分流行的编程界面,一个 Socket
8、 由一个 IP地址和一个端口号唯一确定。 但是, Socket 所支持的协议种类也不光 TCP/IP 一种,因此两者之间是没有必然联系的。在 Java 环境下, Socket 编程主要是指基于 TCP/IP 协议的网络编程。 Socket 通讯的过程 。 Server 端 Listen(监听 )某个端口是否有连接请求, Client 端向 Server 端发出 Connect(连接 )请求, Server 端向 Client端发回 Accept(接受)消息。一个连接就建立起来了。 Server 端和 Client 端都可以通过 send, recv 等方法与对方通信 。 3.设计图 图 1:聊
9、天室用例图 用例说明文本: 1、 用户登录用例:客户端运行,用户可以用用户名和端口号登陆到服务器。 2、 服务器注册用例:服务器根据用户输入的用户名和端口号和 sip 地址记录用户信息并把信息广播给所有的在线用户。 3、 客户端发送消息用例:客户端县服务器带有关键字(群聊 /私聊 /登录 /退出)的消息到服务器。 4、 服务器转发消息用例:服务器解析收到的消息,提取目的端 sip 地址,并把消息转发到目的端。 5、 客户端退出用例:客户端向服务器发送 log on 消 息。服务器把该客户信息从用户列表中删除,并更新在线列表。 图 2 聊天室领域模型 图 3 登录顺序图 图 4 聊天顺序图 四
10、. 实训项目 结果及分析 项目分析: 客户端实现: 以服务方主机地址和端口号为参数调用 Socket 类的构造函数去创建一个 Socket 对象 . 创建过程包含了向服务方请求建立通讯连接。使用 Socket 对象的 getInputStream() 和 getOutputStream() 方法创建用于网络传输的输入 /输出流。使用所得的网络流对象读写数据 ,网络流对象将读写转换成对 Socket 数据的接收和发送。工作完毕 , 关闭网络流对象 服务器实现:以某端口号为参数调用 ServerSocket 类的构造函数去创建一个 ServerSocket 对象,作为服务器的 Socket。调用被
11、创建的 ServerSocket 对象的 accept() 方法在指定端口监听客户方的连接请求。收到客户请求后 ,accept() 方法返回一个新建的 Socket 对象 , 该对象代表和客户方建立起来的通讯连接在服务方的通讯端点。使用 Socket 对象的 getInputStream() 和 getOutputStream() 方法创建用于网络传输的输入 /输出流。使用所得的网络流对象读写数据 ,网络流对象将读写转换成对 Socket 的数据的接收和发送。工作完毕 , 关闭网络流对象 项目实现: 五 . 实训 项目 人员、进度 安排及完成过程 小组一共六 个人,在这一星期的实训中,每个人都
12、认真学习了 java socket 的内容,并在此基础上进一步 完成聊天室功能实现 。由于基础不同,我小组分工及人员完成情况如下: 小组组长:在这 个项目 里主要负责协调各个组员之间的协作 ,进行项目分工,画用例模型,总结整理组员的工作。 技术经理: 主要负责 java socket 的研究并回答小组其他成员的疑问,在聊天室的设计过程中,对一些功能实现提出了建设性的意见。 技术人员: 主要负责几个聊天室程序的分析与设计,设计文档的撰写,聊天室程序编写的大部分工作。 测试人员:负责聊天室程序的测试工作,需求文档的撰写, 负责文档的整理,资料的搜集以及小组 PPT 的制作。 六 . 实训项目心得及
13、体会 心得体会: 理解了 socket 工作流程和实现方法,熟练掌握 socket 编程,实现了简单的聊天室功能,对多线程有 了更进一步的理解。通过老师对 SIP 协议的讲解,使我对 SIP 协议有了一个初步的认识,使我明白了 SIP(Session Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以好似 Internet 多媒体会议、 IP电话或多媒体分发。会话的参与者可以通过组播( multicast)、网状单播( unicast)或两者的混合体进行通信。在学习网络传输的过程中,对两种网络传输协议有了更进一步的理解和
14、深刻的体会。 七 . 附录 (附上 实训项目其他 文档,具体内容 根据项目要求确定) 1. 需求分析文档 错误!未找到索引项。 2. 设计文档 3. 项目 PPT 4. 源程序 Linux 操作系统下基于 c 语言的 socket 聊天室实现 一 . 实训项目目的和要求(说明通过本项目希望达到的目的和要求) 基于 Linux 系统下的 socket 编程 P2P 聊天系统 1.掌握 Linux 环境下 socket 编程的基本过程; 2.熟练掌握 C语言编程方法; 3.了解 GCC 编译器的编译过程,并能在 Linux 系 统下熟练使用。 二 . 实训项目开发环境(说明本项目需要的环境) 系统
15、环境: Linux 系统 编译环境: GCC 编译器 三 . 实训项目内容(说明本项目的内容,如:问题分析、设计方案、算法、设计图等) 问题分析:如何通过 socket 实现 Linux 环境下的点对点通信。 设计方案: 1. 目的:在 Linux 系统中实现点对点通信 2. 要求:使用 socket、 C语言编程 3. 步骤:( 1)根据 socket 通信机制,编写 C源程序; ( 2)对源程序进行反复测试、修改; ( 3)实现点对点通信功能。 设计图: 开 始主 进 程 m a i n负 责 接 收 消 息S o c k e t ( )B i n d ( )R e c v f r o m ( )子 进 程负 责 发 送 消 息创 建S o c k e t ( )C l o s e ( )S e n d t o ( )C l o s e ( )四 . 实训项目结果及分析 P2P 网络聊天系统的测试结果如下: