实验05 TCP Socket.doc
《实验05 TCP Socket.doc》由会员分享,可在线阅读,更多相关《实验05 TCP Socket.doc(21页珍藏版)》请在一课资料网上搜索。
1、一本实验目的及要求:1 掌握TCP/IP体系结构中端口、套接字、TCP协议概念。理解什么是SAP、端口的范围划分、套接字的组成等概念,掌握TCP传输模式和netstat命令的用途;2 掌握TCP SOCKET的ServerSocket和Socket;学习为TCP服务的 Socket和ServerSocket类的使用,掌握TCP连接的方法,服务器接收客户端连接请求的方法,创建输入/输出流的方法,传输数据的方法,以及关闭流和套接字,注意可能会出现的异常操作;3 理解进程和线程的概念,掌握TCP SOCKET技术中多线程技术,理解JAVA中的动态数组的内容。4 实验报告内容应包括,本实验的第三、四、
2、五部分的答案,以及第六部分的程序后要求。二、基础知识1. TCP协议TCP是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。TCP所提供服务的主要特点:面向连接的传输;端到端的通信;高可靠性,确保传输数据的正确性,不出现丢失或乱序;全双工方式传输;采用字节流方式,即以字节为单位传输字节序列;紧急数据传送功能TCP支持的服务:文件传送File Transfer;远程登录Remote login;计算机邮件Mail;网络文件系统(NFS);远程打印(Remot
3、e printing);远程执行(Remote execution);名字服务器(Name servers);终端服务器(Terminal servers)。 2. 端口TCP/IP协议中提出了端口(port)的概念,用于标识网络主机上通信的软件进程。 端口实际上是一个抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立关联(binding)后,传输层传给该端口的数据都被相应的应用进程所接收。端口又是在网络体系结构中应用进程访问传输服务的入口点SAP(Service Access Point服务访问点)。在TCP/IP体系中,用于存储端口号长度为16bi
4、t ,取值范围065535,它用于存储本地软件进程,所以仅具有本地意义。通常,端口分为:熟知端口,取值范围01023,为常用应用进程指定的固定值;一般端口,取值范围102449151,供一般程序使用;动态端口:4915265535供某些默认服务使用,如表1所示。表1 常用进程和熟知端口echo7验证2台计算机连接有效性daytime13服务器当前时间文本描述ftp20/2121用于命令,20用户数据telnet23远程登录smtp25邮件发送whois43网络管理的目录服务dns53域名解析tftp69小文件传输finger79主机用户信息http80HTTPpop3110邮局协议nntp11
5、9网络新闻传输协议, 发布Usenet新闻snmp161网络管理协议rip520路由协议 3. 套接字套接字Socket原意是 “插座”,简单的说就是参与通信两方的一种约定,用套接字中的相关函数来完成通信过程。为了区分不同应用程序进程间的网络通信和连接,主要使用3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号,通过将这3个参数结合起来,与一个Socket绑定,应用层就可以和传输层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。通常的表示方式为:SOCKET=(传输协议,IP,Port)。 4 . NetstatNetStat是DO
6、S命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息.Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。可以通过执行Netstat /help获得该应用程序选项的相关帮助。在Java语言中,实现TCP 套接字中有两个基础类,分别为:l Socket类: 建立一个客户端标识l ServerSocket类: 建立一个服务器端标识 5. ServerSocket该类实现服务器socket,一个服务器socket等待网络上的连接请求。通常操作都是基于这个请求,并且会返回一个结果
7、给请求连接者,其类描述如图2所示。图2 ServerSocket类描述ServerSocket构造方法有:ServerSocket() 创建一个空的服务端socket;ServerSocket(intport) 在指定端口创建一个服务端socket,;ServerSocket(intport, intbacklog) 在指定端口创建一个服务端socket和日志;ServerSocket(intport, intbacklog, InetAddressbindAddr) 在指定端口和地址上创建一个服务端socket和日志。 6. Socket该类实现一个客户端socket,这个socket表示在
8、通信的两台设备之间的端点,其类描述如图3所示。图3 Socket类描述Socket构造方法有:Socket() 创建一个空的客户端socket;Socket(InetAddressaddress, intport) 创建一个连接指定远程地址和端口的客户端socket;Socket(InetAddressaddress, intport, InetAddresslocalAddr, intlocalPort) 在本地指定地址和端口,创建一个连接指定远程地址和端口的客户端socket;Socket(Stringhost, intport) 创建一个连接指定主机名称和端口的客户端socket;Soc
9、ket(Stringhost, intport, InetAddresslocalAddr, intlocalPort) 在本地指定地址和端口,创建一个连接指定远程主机名称和端口的客户端socket。基本工作原理,如图4所示。1 启动服务器端ServerSocket,监听指定端口;2 启动客户端Socket,连接服务器端Socket;3 服务器端Accept确认连接,建立通信通道;4 建立输入和输出流,进行通信;5 通信完毕,关闭Socket连接。7. 多线程(Thread)每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组
10、指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。Java里面有2个方法实现多线程,不论哪种方法都需要覆盖public void run()方法1 继承 Thread类,比如class MyThread extends Thread public void run() / 这里写上线程的内容 public static void main(String args) / 使用这个方法启动一个线程 new MyThread().start(); 2 实现 Runnable接口class MyThre
11、ad implements Runnable public void run() / 这里写上线程的内容 public static void main(String args) / 使用这个方法启动一个线程 new Thread(new MyThread().start(); 一般鼓励使用第二种方法,因为Java里面只允许单一继承,但允许实现多个接口。第二个方法更加灵活。三类及方法:1. ServerSocket常用方法Socketaccept() 接受客户端的连接请求;voidbind(SocketAddressendpoint) 绑定到指定的地址和端口;voidclose() 关闭该Se
12、rverSocket;InetAddressgetInetAddress() 获得该ServerSocket的本地地址;intgetLocalPort() 获得本地监听端口;intgetReceiveBufferSize() 获得接收缓存尺寸;intgetSoTimeout() 获得数据包超时时间;booleanisClosed()判断ServerSocket是否关闭;voidsetReceiveBufferSize(intsize)设置接收缓存尺寸;voidsetSoTimeout(inttimeout) 以毫秒设置数据包超时时间;StringtoString() 将地址和端口作为字符串返回
13、。2. Socket常用方法voidbind(SocketAddressbindpoint) 绑定socket在本地;voidclose() 关闭该socket;voidconnect(SocketAddressendpoint) 连接该socket到服务器上;voidconnect(SocketAddressendpoint, inttimeout) 连接该socket到服务器并设置超时时间;InetAddressgetInetAddress() 获得该socket连接的地址;InputStreamgetInputStream() 获得该 socket的输入流;InetAddressgetL
14、ocalAddress() 获得该socket的本地地址;intgetLocalPort()获得该socket的本地端口;OutputStreamgetOutputStream()获得该 socket的输出流;intgetPort()获得该 socket的远端端口;intgetReceiveBufferSize() 获得该Socket的接收缓存容量;intgetSendBufferSize()获得该Socket的发送缓存容量;intgetSoTimeout() 获得超时时间;booleanisClosed() 判断该socket是否关闭;booleanisConnected() 判断该sock
15、et是否连接;voidsetKeepAlive(booleanon) 设置该socket的连接状态;voidsetReceiveBufferSize(intsize) 设置接收缓存容量;voidsetSendBufferSize(intsize) 设置发送缓存容量;voidsetSoTimeout(inttimeout) 设置毫秒级的超时时间;StringtoString() 将该socket转换为字符串输出。三、基础概念填空1. TCP是(一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议 ), UDP是( TCP/IP 参考模型中传输层的无连接协议 ,提供
16、面向事务的、简单的、不可靠数据传送服务 )。2. 端口是(网络体系结构中应用层与传输层之间的通信协议接口 ),由( 16 )bit构成,表示范围( 065535 ),其代表了( 存储本地软件)进程,且只具备本地意义。3. 套接字是(参与通信两方的一种约定,用套接字中的相关函数来完成通信过程 ),其三个构成部分是( 通信的目的IP地址 )、( 使用的传输层协议(TCP或UDP) )和(使用的端口号 )。4. NetStat是(DOS命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息 ),要查看有效连接信息使用的参数是( -a ),要
17、查看所有的连接信息使用的参数是( -n )。当发现连接的状态是Listening表示( 某端口 是个开放的TCP端口,正处于监听状态,等待远程用户的连接 ),Established表示(表示已建立通信连接,两台机器正在交换数据 )。5. 在JAVA中TCP的套接字类是( Socket )和(ServerSocket )。ServerSocket类的accept的作用是( 实现与客户端的连接,完成TCP连接的三次握手 ),Socket类获得输入流的方法是(InputStream getInputStream() ),获得输出流的方法是(OutputStream getOutputStream()
18、 ).四、 程序填空1. 客户端连接服务器端import java.io.* /引用输入与输出类库import .* /引用网络类库public class exp_5_1 public static void main(String args) String hostName = ; int port = 80; Socket cs = null; try cs = new Socket (hostName, port); System.out.println(连接+hostName+的端口+port+成功); System.out.println(对方主机 + cs.getInetAddr
19、ess() + :对方端口 + cs.getPort(); System.out.println(本地主机 + cs.getLocalAddress() + :本地端口 + cs.getLocalPort(); Cs. close (); catch(Exception e) System.err.println(无法连接指定服务); 2. 客户端连接服务器端,并获得输入与输出流import java.io.*;import .*;public class exp_5_3 public static void main(String args) throws IOException Socke
20、t cs = null; DataOutputStream os = null; DataInputStream is = null; try/建立socket连接 cs = new Socket (localhost, 8000);/发出连接请求 is = new DataInputStream(cs. getInputstream (); os = new DataOutputStream(cs. getOutputstream (); catch(UnknownHostException e) System.err.println(不可识别的主机); System.exit(0); ca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验05 TCP Socket 实验 05
