第16章 网络编程_第1页
第16章 网络编程_第2页
第16章 网络编程_第3页
第16章 网络编程_第4页
第16章 网络编程_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第第16章章 Java网络编程网络编程2本章主要内容n16.1 网络基础网络基础n16.2 URL编程编程n16.3 用用Java语言实现底层网络通信语言实现底层网络通信316.1 网络基础网络基础n16.1.1 TCP/IP协议协议n16.1.2 通信端口通信端口n16.1.3 URL概念概念n16.1.4 Java语言的网络编程语言的网络编程416.1.1 TCP/IP协议协议nInternet的主要协议有:网络层的的主要协议有:网络层的IP协议;传输层协议;传输层的的TCP和和UDP协议;应用层的协议;应用层的FTP、HTTP、SMTP等协议。等协议。nTCP/IP网络参考模型包括四个

2、层次:网络参考模型包括四个层次:应用层、传应用层、传输层、网络层、链路层输层、网络层、链路层。每一层负责不同的功能,。每一层负责不同的功能,516.1.1 TCP/IP协议协议1链路层链路层链路层也称为数据链路层或网络接口层。链路层也称为数据链路层或网络接口层。通常包括操作系通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其它任何传输媒介)有关的一起处理与电缆(或其它任何传输媒介)有关的物理接口物理接口细节细节。2网络层网络层网络层对网络层对TCP/IP网络中的硬件资源进行标识。网络中的硬件资源进行标识。主要完

3、成主要完成IP地址的管理。地址的管理。616.1.1 TCP/IP协议协议3传输层传输层在在TCP/IP网络中最常用的传输协议是传输控制协网络中最常用的传输协议是传输控制协TCP和用和用户数据报协议户数据报协议UDP(User Datagram Protocol)。主要用来完。主要用来完成数据的传输。成数据的传输。TCP协议是通过在端点与端点之间建立持续的连接而进行协议是通过在端点与端点之间建立持续的连接而进行通信的。是一种有序传输。通信的。是一种有序传输。UDP协议是一种无连接的传输协议。但效率比较高。协议是一种无连接的传输协议。但效率比较高。4应用层应用层大多数基于大多数基于Interne

4、t的应用程序都被看做的应用程序都被看做TCP/IP网络的最上网络的最上层协议层协议应用层协议。例如:应用层协议。例如:FTP、HTTP、SMTP、POP3、Telnet等协议。等协议。716.1.2 通信端口通信端口nInternet上传输的数据都带有标识目的主机与端口号的地址上传输的数据都带有标识目的主机与端口号的地址信息,主机的地址由信息,主机的地址由32位的位的IP地址标识,地址标识,IP协议通过该地协议通过该地址把数据发送到正确的目的主机;端口号由一个址把数据发送到正确的目的主机;端口号由一个16位的数位的数字标识,字标识,TCP与与UDP协议根据端口号把数据传送给正确的协议根据端口号

5、把数据传送给正确的应用程序。应用程序。n端口号的范围是端口号的范围是065535,其中,其中11023之间的端口号是为之间的端口号是为HTTP、FTP等系统应用保留等系统应用保留的,的,FTP协议的端口号是协议的端口号是21,HTTP协议的端口号是协议的端口号是80,Telnet协议的端口号是协议的端口号是23,用户,用户应用程序只能使用应用程序只能使用1024以上的端口号,其中以上的端口号,其中10244999可任可任意被用户用作客户端套接字端口,意被用户用作客户端套接字端口,500065535可任意被用可任意被用户用作服务端套接字端口。户用作服务端套接字端口。816.1.2 通信端口通信端

6、口916.1.3 URL概念概念nURL是统一资源定位器是统一资源定位器(Uniform Resource Locator)的英文缩写,它表示的英文缩写,它表示Internet上某一资源的上某一资源的地址。地址。Internet上的资源包括上的资源包括HTML文件、图像文文件、图像文件、声音文件、动画文件以及其他任何内容件、声音文件、动画文件以及其他任何内容(并不并不完全是文件,也可以是对数据库的一个查询等完全是文件,也可以是对数据库的一个查询等)。1016.1.3 URL概念概念nURL的基本结构由的基本结构由5部分组成,其格式如下:部分组成,其格式如下:n传输协议传输协议:/主机名主机名:

7、端口号端口号/文件名文件名#引用引用1.传输协议传输协议(protocol):传输协议是指所使用的协议名,如:传输协议是指所使用的协议名,如HTTP、FTP等。等。2.主机名主机名(hostname):主机名是指资源所在的计算机。可以:主机名是指资源所在的计算机。可以是是IP地址,也可以是计算机的名称或域名。地址,也可以是计算机的名称或域名。3.端口号端口号(portnumber):一个计算机中可能有多种服务,如:一个计算机中可能有多种服务,如Web服务、服务、FTP服务或自己建立的服务等。为了区分这些服服务或自己建立的服务等。为了区分这些服务,就需要使用端口号,每一种服务用一个端口号。务,就

8、需要使用端口号,每一种服务用一个端口号。1116.1.3 URL概念概念4.文件名文件名(filename):文件名包括该文件的完整路径。在:文件名包括该文件的完整路径。在HTTP协议中,有一个默认的文件名是协议中,有一个默认的文件名是index.html,因此,因此,下列两个地址是等价的。下列两个地址是等价的。http:/http:/ 5.引用引用(reference):引用就是资源内部的某个参考点。如:引用就是资源内部的某个参考点。如http:/ Java语言的网络编程语言的网络编程nJava语言的网络编程分为三个层次。语言的网络编程分为三个层次。n最高一级的网络通信就是我们前面章节中所讲

9、的从网络上最高一级的网络通信就是我们前面章节中所讲的从网络上下载小程序。下载小程序。n次一级的通信,就是前面介绍的通过类次一级的通信,就是前面介绍的通过类URL对象指明文件对象指明文件所在位置,并从网络上下载声音和图像文件,然后对声音所在位置,并从网络上下载声音和图像文件,然后对声音播放和图像显示。播放和图像显示。1.最低一级的通信是利用最低一级的通信是利用包中提供的类直接在程序包中提供的类直接在程序中实现网络通信。中实现网络通信。1316.1.4 Java语言的网络编程语言的网络编程借助HTML从网上下载applet在程序中通过URL访问网上资源通过包中的类直接在程序中实现网络通讯1416.

10、1.4 Java语言的网络编程语言的网络编程n针对不同层次的网络通信,针对不同层次的网络通信,Java语言提供的网络功能有四语言提供的网络功能有四大类:大类: URL、InetAddress、Socket、Datagram。nInetAddress面向的是面向的是IP层层,用于标识网络上的硬件资源。,用于标识网络上的硬件资源。n URL面向的面向的应用层应用层,通过,通过URL,Java程序可以直接送出程序可以直接送出或读入网络上的数据。或读入网络上的数据。nSockets和和Datagram面向的则是面向的则是传输层传输层。Sockets使用的是使用的是TCP协议协议,这是传统网络程序最常用

11、的方式,可以想象为,这是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道进行通信。两个不同的程序通过网络的通信信道进行通信。Datagram则使用则使用UDP协议协议,是另一种网络传输方式,它,是另一种网络传输方式,它把数据的目的地把数据的目的地记录在数据包中,然后直接放在网络上。记录在数据包中,然后直接放在网络上。1516.1.4 Java语言的网络编程语言的网络编程包中的主要的类包中的主要的类n面向面向IP层的类:层的类:InetAddressn面向应用层的类:面向应用层的类:URL、URLConnectionn面向传输层的类:面向传输层的类:nTCP协议相关类协议相关

12、类:Socket、ServerSocketnUDP协议相关类协议相关类:DatagramPacket、DatagramSocket、MulticastSocketn可能产生的异常:可能产生的异常:nBindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceException1616.2 URL编程编程n在在Java中,中,包里面的类是进行网络编程的,包里面的类是进行

13、网络编程的,其中其中.URL类和类和.URLConnection类类使编程者能很方便的利用使编程者能很方便的利用URL在在Internet上进行网上进行网络通信。络通信。1716.2.1 创建创建URL对象对象n类类URL提供了很多构造方法来生成一个提供了很多构造方法来生成一个URL对象:对象:npublic URL(String spec) npublic URL(URL context, String spec)npublic URL(String protocol, String host, String file)npublic URL(String protocol, String

14、host, int port, String file)n以下是一些具体的构造实例:以下是一些具体的构造实例:nURL url1 = new URL(“http:/”);nURL base = new URL(“http:/”);nURL url2 = new URL(base, “/mywork1.html”);nURL url4 = new URL(“http”, “”,“/lyw/test.html”);nURL url5 = new URL(“http”, “”, 8080, “/java/network.html”);1816.2.1 创建创建URL对象对象n一个一个URL对象生成后

15、,其属性是不能被改变的,但可以通过对象生成后,其属性是不能被改变的,但可以通过它给定的方法来获取这些属性:它给定的方法来获取这些属性:ngetDefaultport():返回缺省的端口号。返回缺省的端口号。ngetFile():获得获得URL指定资源的完整文件名指定资源的完整文件名ngetHost():返回主机名。返回主机名。ngetPath():返回指定资源文件目录和文件名返回指定资源文件目录和文件名ngetPort():返回端口号,默认返回端口号,默认-1ngetProtocol():返回表示返回表示URL中协议的字符串对象。中协议的字符串对象。ngetRef(): 返回返回URL中的中的

16、HTML文档标记,即文档标记,即#号标记。号标记。ngetUserInfo():返回用户信息。返回用户信息。ntoExternalForm():返回完整的返回完整的URL字符串。字符串。ntoString():返回完整返回完整URL字符串。字符串。1916.2.1 创建创建URL对象对象n在构造在构造URL对象而使用其构造方法时会抛出对象而使用其构造方法时会抛出MalformedURLException非运行时异常,因此生成非运行时异常,因此生成URL对象对象时,必须对这一异常进行处理。例如:时,必须对这一异常进行处理。例如:tryURL myURL=new URL(“http:/ catch

17、 (MalformedURLException e)e.printStackTrace();2016.2.2 使用使用URL类访问资源类访问资源n【例例16.1】通过通过URL直接读取网上服务器中的文件内容。本直接读取网上服务器中的文件内容。本例是利用例是利用URL访问访问http:/ 用用Java语言实现底层网络通信语言实现底层网络通信n用用Java语言实现计算机网络的底层通信,就是用语言实现计算机网络的底层通信,就是用Java程序实现网络通信协议所规定的功能的操作,程序实现网络通信协议所规定的功能的操作,这是这是Java语言网络编程的一部分。语言网络编程的一部分。2416.3.1 Inet

18、Address程序设计程序设计n类类InetAddress可以用于标识网络上的硬件资源,它提供了一可以用于标识网络上的硬件资源,它提供了一系列方法以描述、获取及使用网络资源。系列方法以描述、获取及使用网络资源。nInetAddress类没有构造函数,因此不能用类没有构造函数,因此不能用new来构造一个来构造一个InetAddress实例。通常是用它提供的静态方法来获取:实例。通常是用它提供的静态方法来获取:public static InetAddress getByName(String host) :host可可以是一个机器名,也可以是一个形如以是一个机器名,也可以是一个形如“%d.%d.

19、%d.%d”的的IP地址或一个地址或一个DSN域名。域名。public static InetAddress getLocalHost() public static InetAddress getAllByName(String host)n这三个方法通常会产生这三个方法通常会产生UnknownHostException例外,应在例外,应在程序中捕获处理。程序中捕获处理。2516.3.1 InetAddress程序设计程序设计以下是以下是InetAddress类的几个主要方法:类的几个主要方法:npublic byte getAddress():获得本对象的获得本对象的IP地址(存放在字地址

20、(存放在字节数组中)。节数组中)。npublic String getHostAddress():获得本对象的获得本对象的IP地址地址“%d.%d.%d.%d”。npublic String getHostName():获得本对象的机器名。获得本对象的机器名。n获得本地主机的获得本地主机的IP地址:地址:nInetAddress addr=InetAddress.getLocalHost();26App16_2.java编写一个编写一个Java应用程序,直接查询自己主机的应用程序,直接查询自己主机的IP地址和地址和Internet上上WWW服务器的服务器的IP地址。地址。 27App16_2.

21、java2816.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计nSocket通信属于网络底层通信,它通信属于网络底层通信,它是网络上运行的两个程序是网络上运行的两个程序间双向通信的一端间双向通信的一端,它既可以接受请求,也可以发送请求,它既可以接受请求,也可以发送请求,利用它可以较方便地进行网络上的数据传输。利用它可以较方便地进行网络上的数据传输。nSocket是实现客户与服务器是实现客户与服务器(Client/Server)模式的通信方式,模式的通信方式,它首先需要建立稳定的连接,然后以流的方式传输数据,实它首先需要建立稳定的连接,然后以流的方式传输数据,实现网络通信。现

22、网络通信。Socket原意为原意为“插座插座”,在通信领域中译为,在通信领域中译为“套接字套接字”,意思是将两个物品套在一起,在网络通信里的,意思是将两个物品套在一起,在网络通信里的含义就是建立一个连接。含义就是建立一个连接。2916.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计1.Socket通信机制的基本概念通信机制的基本概念(1)建立连接)建立连接n当两台计算机进行通信时,首先要在两者之间建立一个连接,当两台计算机进行通信时,首先要在两者之间建立一个连接,也就是两者分别运行不同的程序,由一端发出连接请求,另也就是两者分别运行不同的程序,由一端发出连接请求,另一端等候连

23、接请求。一端等候连接请求。n当等候端收到请求并接受请求后,两个程序就建立起一个连当等候端收到请求并接受请求后,两个程序就建立起一个连接,之后通过这个连接可以进行数据交换。此时,请求方称接,之后通过这个连接可以进行数据交换。此时,请求方称为为客户端客户端,接收方称为,接收方称为服务器端服务器端。n应用在这两端的应用在这两端的TCP Socket分别称为分别称为服务器服务器Socket和和客户客户Socket。n基本原理类似于电话系统。基本原理类似于电话系统。3016.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计(2)连接地址)连接地址n为了建立连接,需要有一个程序向另一台计算

24、机上的程序发为了建立连接,需要有一个程序向另一台计算机上的程序发出请求,其中,能够唯一识别对方机器的,就是计算机的名出请求,其中,能够唯一识别对方机器的,就是计算机的名称或称或IP地址地址,称为,称为连接地址连接地址,类似于电话系统中的电话号码。,类似于电话系统中的电话号码。n计算机上的每个程序有一个唯一的端口号,通过端口号指定计算机上的每个程序有一个唯一的端口号,通过端口号指定要连接的程序。所以一个完整的连接应该是要连接的程序。所以一个完整的连接应该是IP+端口端口。n两个程序进行连接之前要约定好端口号。有服务器端分配端两个程序进行连接之前要约定好端口号。有服务器端分配端口号并等候请求,客户

25、端利用这个端口号发出连接请求,当口号并等候请求,客户端利用这个端口号发出连接请求,当两个程序所设定的端口号一致时连接成功。两个程序所设定的端口号一致时连接成功。3116.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计(3)TCP/IP Socket通信通信nSocket在在TCP/IP协议中定义,针对一个特定的连接,每台机协议中定义,针对一个特定的连接,每台机器上都有一个器上都有一个“套接字套接字”,可以想象在它们之间有一条虚拟,可以想象在它们之间有一条虚拟的的“线缆线缆”,线缆的每一端都插入一个,线缆的每一端都插入一个“套接字套接字”或或“插座插座”里。里。n在在Java语

26、言中,服务器端套接字使用语言中,服务器端套接字使用ServerSocket类,客户类,客户端套接字使用端套接字使用Socket类。类。3216.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计SOCKET连接过程连接过程n根据连接启动的方式以及本地套接字要连接的目标,套接字根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:之间的连接过程可以分为三个步骤:服务器监听,客户端请服务器监听,客户端请求,连接确认求,连接确认。n服务器监听服务器监听:服务器端套接字并不定位具体的客户端套接字,:服务器端套接字并不定位具体的客户端套接字,而是处于而是处于等

27、待连接的状态等待连接的状态,实时监控网络状态。,实时监控网络状态。n客户端请求客户端请求:是指由客户端的套接字提出连接请求,要连接:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,先描述它要连接的服务器的套接字,指出服务器端套接字的指出服务器端套接字的地址和端口号地址和端口号,然后就向服务器端套接字,然后就向服务器端套接字提出连接请求提出连接请求。n连接确认连接确认:是指当服务器端套接字监听到或者说接收到客户:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请

28、求,它就响应客户端套接字的请求,建立端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。继续处于监听状态,继续接收其他客户端套接字的连接请求。3316.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计3416.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计2.客户端客户端Socket类与服务器端类与服务

29、器端ServerSocket类类n在在Java中,通信端点由中,通信端点由.Socket类(客户端)或类(客户端)或.ServerSocket类(服务器端)表示。位于两台不同机类(服务器端)表示。位于两台不同机器上的应用软件通过网络连接发送和接收字节流,从而实现器上的应用软件通过网络连接发送和接收字节流,从而实现通信。其中,通信。其中,Socket类代表的是客户端,它是一个连接远程类代表的是客户端,它是一个连接远程服务器应用时临时创建的端点。服务器应用时临时创建的端点。nServerSocker类类代表的是服务器端,它启动后等待来自客户代表的是服务器端,它启动后等待来自客户端的连接请求;一旦接

30、收到请求,端的连接请求;一旦接收到请求,ServerSocket创建一个创建一个Socket实例来处理与该客户端的通信。对于服务器应用,我实例来处理与该客户端的通信。对于服务器应用,我们不知道客户端应用什么时候会试图连接服务器,服务器必们不知道客户端应用什么时候会试图连接服务器,服务器必须一直处于等待连接的状态。须一直处于等待连接的状态。nsocket类类n当客户程序需要与服务器程序通讯的时候,客户程序在客户当客户程序需要与服务器程序通讯的时候,客户程序在客户机创建一个机创建一个socket对象。对象。3516.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计socket类构造

31、方法类构造方法npublic Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。创建一个流套接字并将其连接到指定主机上的指定端口号。 npublic Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定创建一个流套接字并将其连接到指定 IP 地址的指定端口号地址的指定端口号 npublic Socket(String host, int port, InetAddress localAddr, int localPort)创建一个套接字并将其连接到指定远程地址上的指定远程端口创

32、建一个套接字并将其连接到指定远程地址上的指定远程端口npublic Socket(InetAddress address, int port, InetAddress localAddr,int localPort)创建一个套接字并将其连接到指定远程地址上的指定远程端口创建一个套接字并将其连接到指定远程地址上的指定远程端口这些方法都将抛出例外这些方法都将抛出例外IOException,程序中需要捕获处理。,程序中需要捕获处理。两两个构造函数都创建了一个基于个构造函数都创建了一个基于Socket的连接服务器端流套接字的连接服务器端流套接字的的流套接字流套接字。3616.3.2 基于连接的基于连接

33、的Socket通信程序设计通信程序设计Socket 类常用方法类常用方法n Socket的输入的输入/输出流管理输出流管理public InputStream getInputStream()public OutputStream getOutputStream() n这些方法都将抛出例外这些方法都将抛出例外IOException,程序中需要捕获处理。,程序中需要捕获处理。n 关闭关闭Socketpublic void close() throws IOException3716.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计Socket 类常用方法类常用方法n设置设置/获取

34、获取Socket数据数据public InetAddress getInetAddress():获取创建获取创建Socket对象时指对象时指定的计算机定的计算机IP地址。地址。public InetAddress getLocalAddress():获取创建获取创建Socket对象时对象时客户计算机的客户计算机的IP地址。地址。public int getPort() :获取创建获取创建Socket对象时远程主机的端口号对象时远程主机的端口号public int getLocalPort()public void setSoTimeout(int timeout):设定客户端接口所需等:设定客

35、户端接口所需等到的时间限度到的时间限度n 这些方法都将抛出例外这些方法都将抛出例外SocketException。3816.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计(2)ServerSocket类类nServerSocket类的作用是实现客户机类的作用是实现客户机/服务器模式的通信方式服务器模式的通信方式下服务器端的套接字。下服务器端的套接字。n构造方法:构造方法:npublic ServerSocket(int port)npublic ServerSocket(int port, int backlog):支持指定数目的:支持指定数目的连接连接npublic Ser

36、verSocket(int port, int backlog, InetAddress bindAddr)n这些方法都将抛出例外这些方法都将抛出例外IOException,程序中需要捕获处理。,程序中需要捕获处理。3916.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计(2)ServerSocket类类n主要方法主要方法npublic Socket accept() :在服务器端的指定端口监听客户端在服务器端的指定端口监听客户端发来的连接请求,并与之连接。发来的连接请求,并与之连接。npublic void close() :关闭:关闭Socketnpublic InetA

37、ddress getInetAddress() :返回服务器返回服务器的的IP地址地址npublic int getLocalPort() :取得取得服务器的端口号服务器的端口号4016.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计(3)Socket通信模式通信模式n根据连接启动的方式以及本地套接字要连接的目标,套接字根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:之间的连接过程可以分为三个步骤:服务器监听,客户端请服务器监听,客户端请求,连接确认求,连接确认。n服务器监听服务器监听:服务器端套接字并不定位具体的客户端套接字,:服务器端套

38、接字并不定位具体的客户端套接字,而是处于而是处于等待连接的状态等待连接的状态,实时监控网络状态。,实时监控网络状态。n客户端请求客户端请求:是指由客户端的套接字提出连接请求,要连接:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,先描述它要连接的服务器的套接字,指出服务器端套接字的指出服务器端套接字的地址和端口号地址和端口号,然后就向服务器端套接字,然后就向服务器端套接字提出连接请求提出连接请求。n连接确认连接确认:是指当服务器端套接字监听到或者说接收到客户:是指当服

39、务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。继续处于监听状态,继续接收其他客户端套接字的连接请求。4116.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计4216.3.2 基于连接的基于连接的Socket通信程序设计通信程序设

40、计(3)Socket通信模式通信模式n无论一个无论一个Socket通信程序的功能多么齐全、程序多么复杂,通信程序的功能多么齐全、程序多么复杂,其基本结构都是一样的。主要分为服务器端编程和客户端其基本结构都是一样的。主要分为服务器端编程和客户端编程。编程。n服务器程序编写:服务器程序编写:调用调用ServerSocket(int port)创建一个服务器端套接字,并绑创建一个服务器端套接字,并绑定到指定端口上;定到指定端口上;调用调用accept(),监听连接请求,监听连接请求,如果客户端请求连接,则接,如果客户端请求连接,则接受连接,返回通信套接字。受连接,返回通信套接字。调用调用Socket

41、类的类的getOutputStream()和和getInputStream获取输获取输出流和输入流,开始网络数据的发送和接收。出流和输入流,开始网络数据的发送和接收。最后关闭通信套接字。最后关闭通信套接字。4316.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计ServerSocket server = new ServerSocket(9998) n这条语句创建了一个服务器对象,这个服务器使用这条语句创建了一个服务器对象,这个服务器使用9998号端号端口。当一个客户端程序建立一个口。当一个客户端程序建立一个Socket连接,所连接的端口连接,所连接的端口号为号为9998时,

42、服务器对象时,服务器对象server便响应这个连接,并且便响应这个连接,并且server.accept()方法会创建一个方法会创建一个Socket对象。服务器端便可以对象。服务器端便可以利用这个利用这个Socket对象与客户进行通讯。对象与客户进行通讯。Socket incoming = server.accept()n进而得到输入流和输出流,并进行封装进而得到输入流和输出流,并进行封装BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream(); PrintWriter out =

43、 new PrintWriter(incoming.getOutputStream(),true);4416.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计n随后,就可以使用随后,就可以使用in.readLine()方法得到客户端的输入,也方法得到客户端的输入,也可以使用可以使用out.println()方法向客户端发送数据。从而可以根据方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。程序的需要对客户端的不同请求进行回应。n在所有通讯结束以后应该关闭这两个数据流,关闭的顺序是在所有通讯结束以后应该关闭这两个数据流,关闭的顺序是先关闭输出流,再关闭输入流

44、,即使用:先关闭输出流,再关闭输入流,即使用:out.close(); in.close();4516.3.2 基于连接的基于连接的Socket通信程序设计通信程序设计(3)Socket通信模式通信模式n客户端程序编写:客户端程序编写:调用调用Socket()创建一个流套接字,并连接到服务器端;创建一个流套接字,并连接到服务器端;调用调用Socket类的类的getOutputStream()和和getInputStream获取输获取输出流和输入流,开始网络数据的发送和接收。出流和输入流,开始网络数据的发送和接收。 最后关闭通信套接字。最后关闭通信套接字。46例例16_3:服务器端:服务器端So

45、cket编程编程47例例16_3:服务器端:服务器端Socket编程编程监听状态监听状态4849例例16_3:服务器端:服务器端Socket编程编程50例例16_3:服务器端:服务器端Socket编程编程51例例16_3:客户端:客户端Socket编程编程52例例16_3:客户端:客户端Socket编程编程5354例例16_3:客户端:客户端Socket编程编程55例例16_3:客户端:客户端Socket编程编程56例例16_3:客户端:客户端Socket编程编程5716.3.3 无连接的无连接的Socket通信程序设计通信程序设计n UDP协议是无连接的协议,它以数据报作为数据传输的载体。协

46、议是无连接的协议,它以数据报作为数据传输的载体。数据报是一个在网络上发送的独立信息,它的到达、到达时数据报是一个在网络上发送的独立信息,它的到达、到达时间以及内容本身等都不能得到保证。数据报的大小是受限制间以及内容本身等都不能得到保证。数据报的大小是受限制的,每个数据报的大小限定在的,每个数据报的大小限定在64KB以内。以内。n由于由于UDP通信速度较快,所以常常被应用在某些无须实时交通信速度较快,所以常常被应用在某些无须实时交互、准确性要求不高、但传输速度要求较高的场合。互、准确性要求不高、但传输速度要求较高的场合。nUDP协议无需在发送方和接收方建立连接,数据报在网上可协议无需在发送方和接

47、收方建立连接,数据报在网上可以以任何可能的路径传往目的地以以任何可能的路径传往目的地(分组交换分组交换)。nJ软件包中的软件包中的DatagramSocket类和类和DatagramPacket类为实现类为实现UDP通信提供了支持。通信提供了支持。nDatagramSocket用于在程序中间建立传送数据报的通信连用于在程序中间建立传送数据报的通信连接接nDatagramPacket则用来表示一个数据报。则用来表示一个数据报。58n1数据报方式的通信过程数据报方式的通信过程n(1) 创建数据报创建数据报Socket;n(2) 构造用于接收或发送的数据报,并调用所创建构造用于接收或发送的数据报,并

48、调用所创建Socket的的receive()方法进行数据报接收或调用方法进行数据报接收或调用send()发送数据报。发送数据报。n(3)通信结束,关闭通信结束,关闭Socket。16.3.3 无连接的无连接的Socket通信程序设计通信程序设计59n2DatagramSocket类类nDatagramSocket类的三个构造方法如下:类的三个构造方法如下:n(1) DatagramSocket():创建:创建DatagramSocket对象并对象并与本地主机某个可用端口相连。与本地主机某个可用端口相连。n(2) DatagramSocket(int port):创建:创建DatagramSoc

49、ket对象并与指定端口相连。对象并与指定端口相连。n(3) DatagramSocket(int port,InetAddress iaddr):创:创建一个于本地地址绑定的建一个于本地地址绑定的DatagramSocket对象。对象。16.3.3 无连接的无连接的Socket通信程序设计通信程序设计6016.3.3 无连接的无连接的Socket通信程序设计通信程序设计nDatagramSocket类的常用方法如下:类的常用方法如下:n(1) void receive(DatagramPacket packet)throws IOExceptionnreceive()方法将使程序中的线程一直处

50、于阻塞状态,直方法将使程序中的线程一直处于阻塞状态,直到从当前到从当前socket中接收到信息时,将收到的信息存储在中接收到信息时,将收到的信息存储在receive()方法的对象参数方法的对象参数packet的存储机构中。的存储机构中。n(2) void send(DatagramPacket packet)throws IOExceptionnsend()方法将其参数方法将其参数DatagramPacket对象对象packet中包中包含的数据报文发送到所指定的含的数据报文发送到所指定的IP地址主机的指定端口。地址主机的指定端口。6116.3.3 无连接的无连接的Socket通信程序设计通信程

51、序设计n(3) void setSotimeout(int timeout) throws IOExceptionn当程序调用当程序调用DatagramSocket的的receive方法以读取数据方法以读取数据后,程序将处于阻塞状态,知道后,程序将处于阻塞状态,知道setSoTimeout方法所设方法所设置时间超时为止。置时间超时为止。 n(4) void close()n关闭数据报套接字,它不会抛出异常对象。关闭数据报套接字,它不会抛出异常对象。62基于UDP的socket编程接收端接收端(Server)发送端发送端(Client)DatagramSocket(int port)DatagramSocket()Da

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论