计算机网络第二次实验
智能1402班 201408070221 李帅玲
目录
一. 实验目的 ............................................................................... 2 二.实验原理 ................................................................................... 2 1.TCP原理 .................................................................................... 2 2.UDP原理 .................................................................................. 3 三.实验步骤及分析 ........................................................................ 4 1.实验实现流程 ........................................................................... 4 2.TCPClient代码实现及说明: ................................................... 4 3.TCPServer代码及说明 .............................................................. 5 4.UDPClient代码及说明.............................................................. 6 5.UDPServer代码及说明............................................................. 8 6.问题回答 .................................................................................. 9 四.实验总结 ................................................................................. 10 1. 发生的服务器二次运行错误解释: .................................... 10 2.关于TCP和UDP传输不同点的思考: ................................. 10
一. 实验目的
1. 熟练掌握UDP、TCP Client/Server模式的通信原理、 2. 实验内容如下:
二.实验原理
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.TCPClient代码实现及说明:
package shiyan2; import java.io.*; import java.net.*; publicclassTCPClient {
);
publicstaticvoid main(String argv[]) throws Exception{
/**参数说明
* sentence 用户输入的发送到服务器的字符串
* modifiedSentence从服务器得到并发送到用户标准输出的字符串 * inFromUser输入流,连接到标准输入,键盘输入的字符流入它
* inFromClient输入流,连接到客户端套接字,从网络来的字符流入它; * outToServer输出流,连接到套接字,客户端发送到网络的字符流入它 * clientSocket套接字,包含目的服务器IP地址和端口号 */
String sentence;
String modifiedSentence; //创建用户输入流
BufferedReaderinFromUser=
//通过套接字创建TCP连接,localhost为服务器主机名(此处服务器为本地主机), //客户端通过主机名获取主机IP地址,1234为端口号
Socket clientSocket = newSocket(\,1234); //创建连接到套接字的输入输出流
DataOutputStreamoutToServer = BufferedReaderinFromServer =
newBufferedReader(newInputStreamReader(System.in));
newDataOutputStream(clientSocket.getOutputStream());
newBufferedReader(newInputStreamReader(clientSocket.getInputStream())
//从键盘读取字符串
sentence = inFromUser.readLine(); //将字符串输入输出流,字符经套接字流入TCP管道 outToServer.writeBytes(sentence+'\\n'); //接收来自服务器的字符
modifiedSentence = inFromServer.readLine();
//字符输出到屏幕
System.out.println(\+modifiedSentence);
//关闭套接字,同时关闭客户端和服务器之间的TCP连接(此时客户机的TCP向服务器
的TCP发送一个挥手报文)
clientSocket.close(); }
}
3.TCPServer代码及说明
package shiyan2; import java.io.*; import java.net.*; publicclassTCPServer {