《计算机网络》课程设计报告题目基于TCP协议网上聊天程序成绩学院名称信息学院专业班级计科(高职)12-1学生姓名刘胜军学号201203014036指导教师张维玉二○一五年六月二十九日《计算机网络》课程设计报告-1-目录目录........................................................................................................-1-摘要........................................................................................................-2-关键词:TCP协议,网上聊天程序....................................................-2-一.背景概述........................................................................................-2-二.设计内容........................................................................................-3-三.设计要求........................................................................................-3-四.需求分析........................................................................................-3-五.总体设计........................................................................................-3-程序流程图......................................................................................-3-设计思路..........................................................................................-4-设计环境..........................................................................................-4-基本功能..........................................................................................-4-详细设计..........................................................................................-4-六.总结与体会..................................................................................-11-七.参考文献......................................................................................-11-八.源代码............................................................................................-11-《计算机网络》课程设计报告-2-摘要在科学技术飞速发展的时代,网络互联技术显示出了它蓬勃发展的生命力,它逐渐进入了人们的家居生活,使得当今社会的智能化和网络化越来越来明显。人们对居住环境的要求也随着计算机的普及和信息产业的发展而大大提高,越来越多的人已经离不开网络了,无论是工作、学习还是休闲娱乐,这些都已经和网络息息相关:人们可以足不出户了解世界上每个角落在发生什么,买到自己心仪的物品,可以在通过网络进行视频会议,远程控制完成一些工作任务等,网络给人们带来了巨大的便利。由于Internet的信息和服务内容不断的扩大,使得用户对网络的需求急剧增加。同时,企业的网络化也会给企业带来新的市场机遇和商业价值。企业的网络系统建设也随着计算机技术、通信技术、控制技术及多媒体技术进步和互相渗透而发展起来。本课程设计主要致力于基于TCP协议网上聊天程序。TCP,英文全文为TransmissionControlProtocol,是一种传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internetprotocolsuite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。关键词:TCP协议,网上聊天程序一.背景概述在IT的发展之下,人与人之间的沟通越来越偏向于网络。如此一来,节省不少的手机通话费用,但是其弊端也随之将至。现在形形色色的网聊工具,不可胜数,但是如果在一个公司内部,使用那些形形色色的网聊工具,难免不会出现一些工作人员在工作时间,与他人网聊,耽误工作的情况。现为解决此问题,所以开发此程序。之所以选择基于TCP协议网上聊天程序,最重要的一点是因为TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。《计算机网络》课程设计报告-3-公司内部,将网聊服务器的IP地址设为内网地址。如此一来,公司员工通过此网聊工具,只能与公司内部人员沟通。二.设计内容实现一简单的聊天程序实现网上聊天,包括服务器和客户端。三.设计要求(1)支持多人聊天。(2)客户端具有图形化用户界面。四.需求分析聊天工具又称IM软件或者IM工具,主要提供基于互联网络的客户端进行实时语音、文字传输。从技术上讲,主要分为基于服务器的IM工具软件和基于P2P技术的IM工具软件。五.总体设计程序流程图开始创建ServerSocket进程socket接收accept()连接,等待客户端的连接关闭ServerSocket进程结束建立线程SocketThread(socket)开始创建Socket进程创建进程ReadThread()读取服务器信息关闭ServerSocket进程结束发送信息到服务器《计算机网络》课程设计报告-4-设计思路编写服务器,创建ServerScoket进程,循环监听客户端登录情况,时时为新用户创建线程。时时将用户上传的消息发送给每个用户。编写客户端,创建Socket进程,循环从服务器读取消息。添加按钮,为其添加监听事件,每次单击,发送内容到服务器。设计环境操作系统:Windows8编程环境:Eclipse编程语言:Java编程语言版本:javaversion1.8.0_40Java(TM)SERuntimeEnvironment(build1.8.0_40-b26)JavaHotSpot(TM)64-BitServerVM(build25.40-b25,mixedmode)运行环境:Eclipse基本功能客户端使用简便,服务器端运行稳定。客户端与服务器端可运行在多种系统平台,具有良好的兼容性能。客户端与服务器端功能独立,可独立运行在不同的计算机上或运行在同一台计算机上,具有最大的灵活性。1、支持多人聊天。2、客户端具有图形化用户界面。3、聊天发送的消息包括:用户名称、发送时间及正文。4、某用户登录或退出程序时都需要给服务器发送一个消息以通知其他用户。详细设计首先创建服务器,用于服务器端。服务器的搭建具体如下:1.首先在UI界面上,指定IP地址,Port地址。《计算机网络》课程设计报告-5-2.创建指定IP,Port的ServerScoket进程。try{ip=InetAddress.getByName(ServerConstant.getIp().getText());ServerConstant.getArea().append(ServerSocket获取IP地址成功!);ServerConstant.getArea().append(\n);}catch(UnknownHostExceptione1){ServerConstant.getArea().append(ServerSocket获取IP地址失败!);ServerConstant.getArea().append(\n);}System.out.println(1);try{Thread.sleep(1000);}catch(InterruptedExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}port=Integer.parseInt(ServerConstant.getPort().getText());ServerConstant.getArea().append(ServerSocket获取Port地址成功!);ServerConstant.getArea().append(\n);System.out.println(2);try{serverSocket=newServerSocket(port,0,ip);ServerConstant.getArea().append(ServerScoket创建成功!);ServerConstant.getArea().append(\n);}catch(IOExceptione){ServerConstant.getArea().append(ServerScoket创建失败,端口地址可能被占用!);ServerConstant.getArea().append(\n);}3.循环accept()等待客户连接ServerScoket。newThread(newRunnable(){@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubnewwrite(list).start();while(true){System.out.println(5);try{socket=serverSocket.accept();ServerConstant.getArea().append(新客户端连接成功!);list.put(socket,(newPrintWriter(socket.getOutputStream(),true)));ServerCon