欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    计算机网络课程设计报告--利用Socket实现双机通信.docx

    • 资源ID:6724970       资源大小:132.25KB        全文页数:15页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计算机网络课程设计报告--利用Socket实现双机通信.docx

    课程设计报告20142015学年第一学期课程名称计算机网络设计题目利用Socket实现双机通信三、四、五、目录设计原理。理解TCP状态图。设计过程。流程图。源代码和运行结果。利用JavaSock实现双机通信摘要:SoCket(套接字)是一种基于TCP/IP的编程接口。它采用客户/服务器通信机制,使客户端和服务器端通过SOCket接口在网络上实现连接和数据交换。它提供了一系列系统调用,使用户可以方便地实现TCP和UDP等多种网络协议的通信。它使用户可以在网络协议上工作而不必对该网络协议有非常深入的了解。这样编写的程序可被迅速移植到任何支持Socket的网络系统中去。本文通过主要利用JavaSocket来实现双机通信,采用其中的TCP面向连接方式,实现文本数据的交换。并对JaVaSOCket的实现进行简单的分析和讲解,通过本文以达到对Socket的原理又一个较清晰的认识。关使词:套接字、SOCketSerVer类、客户机/服务器模式设计原理1.1 套接字通信套接字(Socket)是网络通信的基本单元操作,又被称作端口,通常用来实现客户方向和服务器的连接。网上的两个程序通过一个双向的通信连接实现数据的交换,在实现双向通信前链路的每一个端都建立一个SoCket,通过对SoCket的读/写操作实现网络通信功能。套接字是网络通信的一个标准。套接字分为以下三种类型:(1)流套接字这是最常用的套接字类型,TCP/IP协议中的TCP协议用此类接口,它提供面向连接的(建立虚电路),无差错的、发送先后顺序一致的,包长度不限和非重复的网络信包传输。(2)数据报套接字TCP/IP协议族中的UDP协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。(3)原始数据包套接字提供对网络下层通信协议的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或者用于协议教隐蔽的功能。所有S。Cket通信程序的基本结构都是一样的,主要有创建SOCket、打开连接到SoCket的输入流和输出流、按照一定的协议对SoCkel进行读写操作。关闭SOCket这四个步躲,通过这四个步骤可以完成一般的SOCkel通信。1. 2JavaSockets编程概述用JaVa语言编程实现S。Cket通信,其原理与使用其他语言基本相同,不同之处是:(1)java是跨平台的编程语言,所以用java编写的SoCket通信程序可以工作在所有支持TCP/IP协议和java的软硬件平台上;(2)因为JaVa是面向对象的语言,所以在编程中需要使用一些与SoCket有关的系统类,其中用于实现流Socket的类主要有:InetAddreSS类,Socket类,ServerSocket类。InetAddress类的对象用来保存IP地址,Socket类的对象用来创建Socket通信的客户端,SOCket通信的服务器端则有SerVerSOCket类的对象来实现,用上述几个类就可以很方便的生成用户自己的TCP/IP通信程序。这几个类都属于J包,大部分用来处理网络操作的系统类都包含在这个包中,所以用JAVA编写程序是,一般要在程序开始部分用import语句加载这个包,以便引入这些类。用JAVA语言编写Socket程序的过程就是创建和定义Socket类和ServerSocket类的子类的过程。L3与Sockets有关的Java类(1) InetAddreSS类:用来保存因特网上的IP地址的类,它含有很多成员变量和方法,其中比较常用的有getLocalHost,geIByName和getAlIByName,利用它们都可以创建该类的对象,获得一个JaVa程序操纵、处理的IP地址。例如下面的程序段可以根据主机名获取其IP地址:tryInetAddressremoteOP=InetAddress.getByName(");catch(UnknownHostExceptionexcpt)System,err.println(Unknownhost:"+excpt);(2) Socket类:用来实现TCP/IP通信的端口套接字类,所有希望通过socket来完成与远程主机进行TCP/IP连接和通信的程序,都必须创建一个SOCket类的对象。这个类对象的作用首先是根据远程主机的IP地址和端口号在本地主机创建一个与远程主机的联接;其次,在连接建立后,本地主机程序就可以使用这个类对象提供的输入/输出通道与远程主机实现通信。当一个s。Cket被创建时,它所指定的连接也将同时被建立并打开,若连接成功,调用这个socket对象的有关方法就可以实现与远程主机的读写通信操作;若连接失败,则构造函数会抛出例外,表示没有成功创建对象。(3) ServerSocket类它是java用来实现TCP/IP通信服务器端程序的主要机制。当一个ServerSocket对象被创建时,程序在本机的指定端口处提供服务并开始监听可能的来自客户端的服务请求。当一个客户请求连接并被接受时,服务器程序将创建一个Socket对象与远程的客户机相连,实现读写通信操作。该类的accept。方法用来等待并接受客户机的一个连接,当这个方法被调用时,服务器进程或线程将处于阻塞状态,直至它监听到有一个客户进程提出服务请求,并与之成功连接,这时方法将返回一个新创建的服务器端的SOCket对象,这个对象已经与远程客户机连接成功,并可以与客户机的SoCket实现读写操作。若服务器可同时提供的连接数超过一个,则服务器程序应该创建一个新的线程来完成与客户机的通信,而保留原有监听线程继续准备接受其它客户机的服务请求。当SerVerSoCket对象要结束它在特定端口上提供的服务时,可以调用close()方法实现。二.理解TCP状态图2.1、 TCP(传输控制协议)TCP(TranSmiSSionControIProtOCol传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,由IETF的RFC793说明(specified)。TCP在IP报文的协议号是6o2.2、 TCP功能概述编辑当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证报文传输的可靠1,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AlMD算法)。该算法主要包括三个主要部分:1)加性增、乘性减;2)慢启动;3)对超时事件做出反应。22.3、 TCP的首部格式图下图所示:一SourcePort是源端口,16位。TCP首部-DestinationPort是目的端口,16位。一SequenceNumber是发送数据包中的第一个字节的序列号,32位。一AcknowledgmentNumber是确认序列号,32位。DataOffset是数据偏移,4位,该字段的值是TCP首部(包括选项)长度除以4。一标志位:6位,URG表示UrgentPointer字段有意义:ACK表示AcknowledgmentNumber字段有意义PSH表示PUSh功能,RST表示复位TCP连接SYN表示SYN报文(在建立TCP连接的时候使用)FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)WindOW表示接收缓冲区的空闲空间,16位,用来告诉TCP连接对端自己能够接收的最大数据长度。一Checksum是校验和,16位。一UrgemPOimerS是紧急指针,16位,只有URG标志位被设置时该字段才有意义,表示紧急数据相对序列号(SeqUenCeNUmber字段的值)的偏移。2.4、 TCP连接编辑TCP连接建立TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答。TCP的三次握手SYN+ACK1,并最终对对方的SYN执行ACK确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。TCP三次握手的过程如下:客户端发送SYN(SEQ=X)报文给服务器端,进入SYN-SEND状态。服务器端收到SYN报文,回应一个SYN(SEQ=y)ACK(ACK=x+l)报文,进入SYNLRECV状态。客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+l)报文,进入Established状态。三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。2TCP连接终止建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。TCP的三次握手TCP连接的终止TCP连接的终止(1)某个应用进程首先调用Ck)Se,称该端执行“主动关闭"(activeclose)。该端的TCP于是发送一个FlN分节,表示数据发送完毕。接收到这个FIN的对端执行“被动关闭"(PaSSiVeCk)se),这个FIN由TCP确认。注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FlN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。(3)一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。(4)接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN0既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。2注意:(1)“通常”是指,某些情况下,步骤1的FlN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。(2)在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭"(half-close)。(3)当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FINo无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。TCP如何提供可靠性编辑TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。1.5、 TCP通过下列方式来提供可靠性:1 .应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)o2 .当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。TCP有延迟确认的功能,在此功能没有打开,则是立即确认。功能打开,则由定时器触发确认时间点。3 .TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。4 .既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。5 .既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。6 .TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。如果一方的应用程序先传10字节,又传20字节,再传50字节,连接的另一方将无法了解发方每次发送了多少字节。只要自己的接收缓存没有塞满,TCP接收方将有多少就收多少。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。另外,TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCIl字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。这种对字节流的处理方式与Unix操作系统对文件的处理方式很相似。Unix的内核对一个应用读或写的内容不作任何解释,而是交给应用程序处理。对UniX的内核来说,它无法区分一个二进制文件与一个文本文件。.设计过程根据以上对TCP的了解,首先要建立两个端口。1 .服务端(SerVer)用eclipse环境编写第一步:建立服务端接口第二步:取客户端对象第三步:手协议(通知服务端已获得连接)第四步:取写入目录的文件2 .客户端(Client)第一步:入要传送的文件第二步:立客户端套接口,建立明确服务信息,如IP端口等(我采用的是IP端口,也可以是其他端口)第四步:获取SoCker输出流第五步:将读取的文件发送到服务端。四.流程图五.源代码和运行结果服务端:packagep7.upload;importjava.io.BufferedReader;iortjava.io.BufferedWriter,importjava.io.File,importjava.io.FileOutputStreara,importjava.io.Fi1eReader;ireportjava.io.FileWriter;ireportjava.io.IOException;ireportjava.io.InputStreairReader;importjava.io.OutputStreani;importjava.io.OutputStreanWriter,inportjava.io.PrintWriter,.ServerSocket;.SocketzpublicclassUploadServer(/上传文本文件r,fpublicstaticvoidmain(Stringargs)throwsIOException/TODOAUtO-generatedmethodstubFiledir=new"16(7:我的接受文件”),if(!(dir.exists()(dir.nkdirs(),ServerSocketServerSockct=newServerSocket(20000);Socketsocket=serverSocket.accept0;System.out.println(socket.getInetAddress0.getH。StAddreSS()+"已连接");/字符流BufferedWriterbr_l三newBufferedWriter(newFileWriterCnewFile(dir,txt");PrintWriterpw=newPrintWriter(socket,getutputStreamOftrue);BufferedReaderbr_2=newBufferedReader(newInputStreamReader(socket.getInputStrearo()rStringline=null,whi1e(1ine=br_2.readLine()l=null)br_l.write(line);br_l.newLine();brJLflush。;pwprintln("接U烷毕”);/pw.writeC*jishfjs2)./pw.flush,);两句话等同于PrintIn方法。brl.closeO;socket.close0;运行结果:1234578910 ll “12131718192021packagep7.upload;ii!ortjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;i11ortjava.io.InputStreamReader;importjava.io.Outputstream;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;.ServerSocket;i11.Socket;publicclassUploadServer/上传文本文件publicstaticvoidmain(Stringargs)throwsIOExceptionConsole:<terminated>UpIoadServerJavaApplicationC:UserslenovoAppDataLocalGenuitecCommonbinarycom.sun.java.jdk.Win32122.207.132.236已连擅客户端:packagep7.upload;importjava.io.BufferedReader,importjava.io.BufferedWriter;importjava.io.FileInputStreain;importjava.io.FileReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreanMriter;importjava.io.PrintWriter;.Socket;i.UnknownHos!Exception;publicclassUploadClient(publicstaticvoidmain(Stringargs)throwsUnknownHostException,IOException(/TODOAuto-generatedmethodstubSocketsocket=newSocket(vl22.207.132.236,20000);字符流BufferedReaderbr_l=newBufferedReader(newFiIeReader("G:警告.txt");PrintWriterPW=newPrintWriter(socket.getOutputStrearo(),true),BufferedReaderbr_2=newBufferedReadertnewIrutStreairReader(socket.getInputStrea();Stringline=null;PrfIiIe(Iine=br_LreadLine()!=null)pw.println(line);socket.shutdownOutputO;Stringstr=br_2.readLine();System,out.println(str);br_l.closeO;socket,closeO;J)运行结果:importjava.io.OutputStreamWriter;importjava.io.Printwriter;.Socket;.UnknownHostException;publicolassUploadclient(publiostaticvoidmain(Stringargs)throwsUnknownHostException,IOException/futo-generatedmethodstubSocketsocket«newSockt(122.207.132,236-,20000);享冽BufferedReaderbr_l=newBuffrdReadr(newFilRder("G:普击txt");Printwriterpw=newPrintwritr(socket.getutputstream()ftrue);BufferedReaderbr_2newBufferedReader(newInputStreamReader(socket.getnputstream();Stringlin三null;while(lin三br-l.r*dLin()!*null)pw.printin(lin);26 socket.shutdownoutput();27 Stringstrbr_2.radLin();28 System.out.printin(str);日CcntoteMXIt<terminated>UptoadCIientpvaApplicationCzUersI¢HvoAppDatAlo<lGeuttecCommonbinarycofn.surJava4cw*x>.6.0.013binavaw.e×e(2014-6-29TiF05没运行的时候“我的接受文件”为空:如下图所示运行过后,“我的接受文件”为“警告.text”:如下图所示我的接受文件主页共享宜百稽I X 高金E囱粘站快捷方式彩贴板f.÷组织口新建项目毡登松访问 科建文件夹新建i打开- 一口奈市 雌' 历史记录 打开图全部选择口。反向睁选择T , 计算机 , 新加卷(G:) >我的接受文件V G S?我的 P库3 ia®1图片11;3,;迅雷下载J宦乐H SISS 8 Ienovo 计算机<网络目A 名称Ljtt修改日期SL大小2014/6/29 18:06文本文档2 KB结束语每一项工程都是不易的,经过一周的努力,即时通信软件终于完工了。在这期间虽遇到很多技术问题,但都通过各种渠道一个个解决了,让我学到了很多知识,丰富了我的实践经验。以下是我的学习心得:1 .对系统开发方法的认识软件开发是一个具体而完整的工程,首先要在态度上摆正,要有坚持不懈,遇到问题不退缩,运用各个途径去解决,相信自己不轻易放弃信念。其次,在建立一个工程前一定要先把这个工程需要实现的功能,实现的顺序,功能结构图及开发流程图构造好,做好充分的准备,再分步实现各个模块。2 .需求分析一定要到位在设计中需要随时与用户保持交流,以保证功能的完善,满足用户的需求。

    注意事项

    本文(计算机网络课程设计报告--利用Socket实现双机通信.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开