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