资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
计算机网络第二次实验智能1402 班 201408070221 李帅玲目录一 实验目的 2二实验原理 21.TCP 原理 22.UDP 原理 3三实验步骤及分析 41.实验实现流程 42. TCPCIient代码实现及说明: 43. TCPServer代码及说明54. UDPCIient代码及说明65. UDPServer 代码及说明 86. 问题回答 9四实验总结 101. 发生的服务器二次运行错误解释: 102关于TCP和UDP传输不同点的思考: 10一实验目的1. 熟练掌握UDP、TCP Client/Server模式的通信原理、2. 实验内容如下:M任一自主机上安装躺译用佃料写的TCPClicnt利UDPCfi訥理序,在摇一台主虹上安装编评TCP曲叱 和 UDPStrverj 序。也果球在运行TCP血之前返行TCPC屉仏将垸七什么现象?新卜么? 氐如果你在运行UDPfver龙畝运行LTDPCIirni ,将境生舟什也? 匕如果你对零门机期口程脊器越憧用了不冏的端口将发生叶点现象?25. IS定在UDPCitcnljivg中我们便用Dntaflmsocket elientSDcKet = new Dat&raTiSDckct 543;J ;KclitrLt-SiiCkct ilew Detagr,am.5QXet (:住UDF3erverj飢时是舌4i必婪进行修世? UDPCIknt和(J。PServer中杓斎接宇端口号是皋小?在耋 此之前它们是塞吵?二实验原理1.TCP原理TCP 是一种面向连接的、可靠的传输层协议。面向连接是指一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。可靠性可以通过多种方法来提供保证(快速重传和回退N步),在这里我们关心的是数 据序列和确认。一个TCP连接的套接字对包含四元组(本地IP地址,本地端口号,目的IP地址,目的 端口号)一个套接字包含一个 IP 地址和一个端口号。服务器为了能对客户机程序发起的连接做出响应,必须在客户机程序试图发起连接之前,作为一个进程在系统中运行。客户机/服务器应用程序传输过程:当服务器进程运行时,客户机进程可以向服务器发起一个TCP连接。在客户机程序中,通过创建一个套接字来完成。当客户机创建它的套接字时,它指定服务器进程的地址即服务器的IP地址和进程的端口号。一旦在客户机程序中生成套接字,客户机的TCP与服 务器的TCP发起三次握手并建立一个TCP连接。这个三次握手发生在运输层,对于客户机程 序和服务器程序是完全透明的。在三次握手期间,当服务器接受到客户机的套接字时,将为特定的客户机程序创建 一个新的套接字。TCP传输流程图:2.UDP 原理UDP 是面向报文的不可靠传输。UDP 是一种无连接的服务,即在两个进程间没有创建管道时所需的初始握手阶段。因为 UDP 没有管道,所以当一个进程需要向另一个发送一批字节时,该发送进程需要为这批字 节附上目的进程地址和目的端口号(TCP传输的字节不需要)。并且,该进程对于每批由发 送进程所发送的字节都必须重复做。UDP目的地址由二元组组成(目的IP地址,目的端口号),带有IP目的地址和端口号的 批字节数据称为分组。 UDP 提供了一种不可靠面向报文的服务模型,它尽力而为地向目的交 付这批字节,但不保证这批字节的确能被交付。 UDP 是面向报文的,是旨在发送方单次操作 所发送的一批字节在接收方作为一个批次来交付,这与 TCP 的字节流语义形成对照。 UDP 是尽力而为的,UDP 传输流程图:三实验步骤及分析1.实验实现流程客户机/服务器应用程序使用面向连接的运输服务案例:1)一台服务机从其标准输入(键盘)读取一行字符,并通过其套接字将该行发送到服务臾器。(2)服务器从其连接套接字读取一行字符。(3)服务器将该字符转换成大写。(4)服务器将修改后的行通过其连接套接字再回发给客户机。(5)客户机从其套接字中读取修改后的行,然后将该行在其标准输出(监视器)上打 印出来。2.TCPCIient代码实现及说明:publicstaticvoid main(String argv) throws Exception/*参数说明* sentence 用户输入的发送到服务器的字符串* modifiedSentence从服务器得到并发送到用户标准输出的字符串* inFromUser输入流,连接到标准输入,键盘输入的字符流入它* inFromClient输入流,连接到客户端套接字,从网络来的字符流入它;* outToServer输出流,连接到套接字,客户端发送到网络的字符流入它* clientsocket套接字,包含目的服务器IP地址和端口号*/String sentence;String modifiedSentence;/创建用户输入流BufferedReaderinFromUser= newBufferedReader(newInputStreamReader(System.in);/通过套接字创建TCP连接,localhost为服务器主机名(此处服务器为本地主机), /客户端通过主机名获取主机IP地址, 1234为端口号Socket clientSocket = newSocket(localhost,1234);/创建连接到套接字的输入输出流DataOutputStreamoutToServer = newDataOutputStream(clientSocket.getOutputStream();BufferedReaderinFromServer = newBufferedReader(newInputStreamReader(clientSocket.getInputStream() );/从键盘读取字符串sentence = inFromUser.readLine();/将字符串输入输出流,字符经套接字流入TCP管道outToServer.writeBytes(sentence+n);/接收来自服务器的字符modifiedSentence = inFromServer.readLine();/字符输出到屏幕System.out.println(From server:+modifiedSentence);/关闭套接字,同时关闭客户端和服务器之间的TCP连接(此时客户机的TCP向服务器 的TCP发送一个挥手报文)clientSocket.close();3TCPServer代码及说明package shiyan2;import java.io.*;import java.net.*;publicclassTCPServer * clientsentence服务器接受客户端发送来的字符串* capi talizedSen tence转换成大写字母后的字符串* inFromClient输入流,连接到套接字,客户端发送过来的字符流入它* outToClient输出流,连接到套接字,服务器发送给客户端的字符流入它* welcomesocket监听用的套接字,包含服务器端口号1234* connectionSocket新套接字,用于与客户端TCP建立连接,其端口号也为1234 */String clientSentence;String capitalizedSentence;/审查请求连接的用户端其TCP目的端口号是否为1234ServerSocketwelcomeSocket = newServerSocket(1234);while (true)/保证一次建立多次与客户端通信Socket connectionSocket = welcomeSocket.accept();/创建输入输出流BufferedReaderinFromClient =newBufferedReader( newInputStreamReader(connectionSocket.getInputStrea m();DataOutputStreamoutToClient =newDataOutputStream(connectionSocket.getOutputStream();clientSentence = inFromClient.readLine();capitalizedSentence=clientSentence.toUpperCase()+n; outToClient.writeBytes(capitalizedSentence);TCP运行结果:先运行TCPServer之后再运行TCPClientalDcdefFrom servei:AECDEF如图,客户端向服务器发送报文段“abcdef”后,服务器将字符转换成大写字母后再发送 回来。4.UDPClient 代码及说明* inFromUser输入流,连接到标准输入,键盘输入的字符流入它* clien tSocke t套接字,包本地端口号* IPAddress目的服务器IP地址* sendData客户端发送的字符串* receiveDa ta客户端接收的字符串* sentence 键盘输入的字符串* sendPacket发送的数据报文(数据,数据长度,目的IP地址,目的端口号)* receivePacket接收的数据报文(数据,数据长度) */BufferedReaderinFromUser= newBufferedReader(newInputStreamReader(System.in);/Da tagramSocke t类型,因为UDP是面向报文的,不同于TCP Socket类型的套接 字/创建套接字,此处没有发起TCP连接,所以不需要把服务器主机名或端口号作为参 数/此种方式,运输层将自动为该套接字分配一个端口号,但不会给服务器自动分配一 个套接字DatagramSocketclientSocket = newDatagramSocket();/ /此种方式,设置客户端端口号为5432 /DatagramSocketclientSocket = new DatagramSocket(5432);/获取服务器IP地址InetAddressIPAddress = I n e t A d d r e s s .getByName (localhost); /创建发送和接受字符串参数byte sendData = newbyte1024; byte receiveData = newbyte1024;/读取键盘输入的字符串并存入字符数组String sentence = inFromUser.readLine(); sendData = sentence.getBytes();/构造数据报文(数据,数据长度,目的IP地址,目的端口号)DatagramPacketsendPacket=newDatagramPacket(sendData,sendData.leng th, I PAddr e s s ,2345);/通过套接字
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号