Java网络编程技术Socket编程ppt

上传人:沈*** 文档编号:191621504 上传时间:2023-03-03 格式:PPT 页数:80 大小:382KB
收藏 版权申诉 举报 下载
Java网络编程技术Socket编程ppt_第1页
第1页 / 共80页
Java网络编程技术Socket编程ppt_第2页
第2页 / 共80页
Java网络编程技术Socket编程ppt_第3页
第3页 / 共80页
资源描述:

《Java网络编程技术Socket编程ppt》由会员分享,可在线阅读,更多相关《Java网络编程技术Socket编程ppt(80页珍藏版)》请在装配图网上搜索。

1、第7章 基于TCP/IP协议的Socket编程7.1 TCP/IP协议7.2 套接字(Socket)7.2.1 Client/Server模式 7.2.2 套接字(Socket)概念7.3 Socket类和ServerSocket类 7.3.1 Socket类 7.3.2 ServerSocket类7.4 Socket编程应用举例 7.4.1 Socket编程的基本步骤 7.4.2 单客户/服务器Socket编程应用举例 7.4.3 多客户/服务器Socket编程应用举例本章小结7.1 TCP/IP协议nTCP/IP协议(传输控制协议/网际协议)是一种网络通信协议,是一种面向连接的可靠的传输协

2、议。它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据传输格式以及传送方式。TCP/IP是Internet的基础协议。nT C P/I P 协 议 的 基 本 传 输 单 位 是 数 据 包(datagram)。TCP协议负责把数据分成若干个datagram,并给每个datagram加上包头;IP在每个包头上再加上接收端主机地址,以确定数据传输的目的地。如果传输过程中出现数据丢失或数据失真等异常情况,TCP协议会自动要求数据重发,并重新分包。TCP保证数据传输的质量,IP协议保证数据的传输。nTCP/IP协议数据的传输是基于TCP/IP模型的4层结构:应用层、传输层、网络层和网

3、络接口层。TCP/IP协议组中两种主要协议 n1、传输层协议n有两个主要的传输层协议:传输控制协议(TCP)和用户数据报协议(UDP)。n(1)传输控制协议(TCP)nTCP传输数据建立在面向连接的基础上,实现了一种“虚电路”的概念。双方通信之前,先建立连接,然后双方即可在其上发送数据流,发送完毕后再关闭连接。这种数据交换方式的优点是效率高,缺点是建立连接和关闭连接需要额外的开销。(1)TCP协议nTCP协议主要提供下列服务:n可靠的数据传输n面向连接的虚电路n缓冲的传输n重新排序n多路复用技术n高效的、全双工传输n流量控制nTCP协议提供的是一种可靠的数据流服务。得到的是一个顺序的无差错的数

4、据流。(2)用户数据报协议(UDP)nUDP是比TCP简单得多的协议,是对IP协议组的扩充。n由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地址机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 UDP 的“端口号”完成的。n源端口号标识了请求域名服务的本地计算机的应用程序,同时需要将所有由目的主机生成的响应包都指定到源主机的这个端口上。UDP与TCP比较n与TCP不同,UDP提供的是面向无连接、“不可靠”的数据报服务。它不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。n由于UDP比较简单,比TCP负载消耗少。主要用于不需要T

5、CP排序和流量控制能力而是自己完成这些功能的应用程序。2、应用层协议 n在应用层中定义了许多高层协议:n(1)TELNET(远程终端访问)nTELNET连接是一个TCP连接。允许一台计算机上的用户登录到远程计算机上并进行交互。支持终端到终端的连接及进程到进程分布式计算的通信。n(2)FTP(文件传输协议)nFTP使得主机间可以共享文件。FTP使用TCP生成一个虚拟连接用于控制信息,然后再生成一个单独的TCP连接用于数据传输。FTP主要提供文件共享、支持间接使用远程计算机、使用户不因各类主机文件存储器系统的差异而受影响、可靠且有效的传输数据等功能。n(3)SMTP(简单邮件传输协议)nSMTP支

6、持在因特网上传递电子邮件,用于可靠且有效的数据传输。它保证把各种类型的电子邮件通过这一协议从一台邮件服务器发送到另一台邮件服务器上。n(4)DNS(域名服务)nDNS提供域名到IP地址的转换,允许对域名资源进行分散管理。n(5)HTTP(超文本传输协议)n是Web浏览器和Web服务器之间通信的标准协议。它指明客户端如何与服务器建立连接,客户端如何从服务器请求数据,服务器如何响应请求,最后连接如何关闭等。HTTP连接是一个TCP连接。nTCP/IP模型中还有其他一些协议,如地址解析协议(ARP)、因特网控制消息协议(ICMP)等。7.2 套接字(Socket)n套接字允许程序员把网络连接当成一个

7、流(Stream),并向这个流读写字节。Socket对程序员掩盖了网络的低层细节,如纠错、包大小、包重传、网络地址等。本节将介绍Client/Server模式、套接字(Socket)概念。7.2.1 Client/Server模式n计算机网络最重要的3个功能是数据通信、资源共享和分布处理。为了满足这些功能需求,计算机网络产生了两种重要的应用模式:客户端/服务器(Client/Server,C/S)模式和浏览器/服务器(Brower/Server,B/S)模式。采用何种应用模式在编程实现时非常重要。下面将主要介绍C/S模式。n在C/S模式下,客户向服务器发出服务请求,服务器接收到请求后,提供相应

8、的服务。其工作方式可通过现实生活中一个例子来说明。在一个酒店中,顾客向服务员点菜,服务员把点菜单通知厨师,厨师按点菜单做好菜后让服务员端给顾客,这就是一种C/S工作方式。如果把酒店看作一个系统,服务员就是客户端,厨师就是服务器,这种系统分工和协同工作的方式就是C/S的工作模式。C/S模式C/S模式下的系统组成n由此可见,工作在C/S模式下的系统被分成两大部分:n(1)客户端部分:为每个用户所专有的,负责执行前台功能。n(2)服务器部分:由多个用户共享的信息与功能,招待后台服务。C/S模式建立的基础nC/S模式的建立基于以下两点:n一是建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要

9、共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。n二是网间进程通信完全是异步的,相互通信的进程既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程建立联系,为二者的数据交换提供同步,这就是基于C/S的TCP/IP。基于C/S模式系统结构 客户端服务器前台显示事务处理数据处理数据库C/S模式的工作模式nC/S模式在操作过程中采取“请求/响应”的工作模式。n当用户需要访问服务器资源时由客户端发出请求,服务器接收到请求后做出响应,然后执行相应的服务,把执行结果返回到客户端,再由客户端作一定处理后返回给用户。“请求/响应”的工作模式的执行过程n执行过程

10、如下:n(1)服务器侦听相应端口的请求;n(2)客户端发出一个请求;n(3)服务器接收到此请求;n(4)服务器处理这个请求,并把处理结果返回给客户端。n从上面所描述的过程可知:客户与服务器进程的作用是非对称的,因此编码不同。服务进程一般是先于客户请求而启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。7.2.2 套接字(Socket)概念n数据在Internet中是以有限大小的分组的形式传输的。一个分组是一个数据报,包括首部和负载。首部包含目的的地址和端口、源地址和端口以及用于保证可靠传输的各种其他管理信息。负载包含数据本身。n但由于分组长度有限,通常必须将数据分解为多个分组,在目

11、的地再重新组合。n在传输过程中,有可能发生一个或多个分组丢失或被破坏的情况,此时就需要重传分组。或者分组乱序到达,则需要重新排序。n这些工作将是非常繁重的。幸运的是,套接字(Socket)的出现使我们不必关心这些事情,我们只需要把网络看成一个流,就象对文件操作一样对这个流进行操作就行了。套接字(Socket)n套接字(Socket)是网络协议传输层提供的接口。Socket是两个程序之间进行双向数据传输的网络通讯端点,有一个地址和一个端口号来标识。n每个服务程序在提供服务时都要在一个端口进行,而想使用该服务的客户机也必须连接该端口。基于Socket的点对点通信 InternetProgramAH

12、ost ASocketProgramBHost BSocket端口两种套接字n流套接字提供一个面向连接的、可靠的数据传输服务,保证数据无差错、无重复、按顺序发送。具有流量控制功能。数据被看作字节流,无长度限制。TCP即是一种基于流套接字的通信协议。n数据报套接字提供一个面向无连接的数据传输服务,不保证数据传输是可靠的、有序的、无重复的。UDP即是一种基于数据报套接字的通信协议。n本章主要介绍基于TCP/IP协议的C/S模式下的Socket编程。基于TCP/IP的Socket通信模式 服务器客户端建立连接传输数据终止连接基于TCP/IP的Socket通信模式n在该种模式下,Socket可以看成是

13、在两个程序进行通信连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送到另外一个Socket中,使这段信息能传送到其他程序。每一个基于TCP/IP的程序都赋予了一个端口号(065535),通过不同的端口号,区别服务器上运行的每一个应用程序和所提供的服务。n值得注意的是,习惯上将低于1024的端口号保留给系统服务使用。n在两个网络应用程序发送和接收信息时都需建立一个可靠的连接,流套接字依靠TCP来保证信息正确到达目的地。实际上,IP分组有可能在网络中丢失或者在传送过程中发生错误。当任何一种情况发生时,作为接收方的TCP将请求发送方TCP重发这个IP分组。因此,两个

14、流套接字之间建立的连接是可靠的连接。Socket可进行的基本操作n(1)连接远程主机n(2)发送数据n(3)接收数据n(4)关闭连接n(5)绑定端口n(6)侦听入站数据n(7)在所绑定端口上接收远程主要的连接利用Socket编程的一般步骤 n(1)分别为服务器和客户端创建Socket对象,建立Socket连接。n(2)打开连接到Socket的输入输出流。Socket对象包含两个流:一个是输入流,表示流入的数据流,其作用是接收数据;一个是输出流,表示流出的数据流,其作用是向外发送数据,其流操作与I/O流相同。n(3)按照一定的协议对Socket进行读/写操作,在本章里是基于TCP/IP协议;n(

15、4)读/写操作结束后,关闭Socket连接。7.3 Socket类和ServerSocket类n在Java语言中,服务器端Socket使用ServerSocket类,客户端Socket使用Socket类,由此来区别服务器端和客户端。本节将对这两个类进行详细介绍。7.3.1 Socket类 .Socket类是Java用来实现客户端TCP操作的基础类,在Java编程中一切与TCP有关的操作包括连接的建立、传输、连接关闭及Socket选项的设置都由Socket类负责,这个类本身使用直接代码通过主机操作系统的本地TCP栈进行通信。Socket类的输入输出都是通过流来实现的。1Socket类的构造函数n

16、(1)public Socket(String host,int port)throws UnknownHostException,IOExceptionn功能:在客户端以指定的服务器host和端口号port创建一个Socket对象,并向服务器发出连接请求。n参数:host:服务器主机名。port:端口号。n若域名服务器无法解析该服务器名或域名服务器没有运行,此时host无法可知,则抛出UnknownHostException异常;若生成Socket时发生I/O错误则抛出IOException异常。n(2)public Socket(InetAddress address,int port)t

17、hrows IOExceptionn功能:在客户端以指定的服务器地址address和端口号port创建一个Socket对象,并向服务器发出连接请求。n参数:address:服务器IP地址。port:端口号。n若生成Socket时发生I/O错误则抛出IOException异常。n(3)public Socket(String host,int port,boolean stream)throws IOExceptionn功能:在客户端以指定的服务器host和端口号port创建Socket对象,并向服务器发出连接请求。如果stream值为true,则创建流Socket对象,否则创建数据报Socke

18、t 对象。n参数:host:服务器名。port:端口号。stream:创建流Socket对象或创建数据报Socket对象的标志。n若生成Socket时发生I/O错误则抛出IOException异常。n(4)public Socket(InetAddress address,int port,boolean stream)throws IOExceptionn功能:在客户端以指定的服务器IP地址address和端口号port创建Socket对象,并向服务器发出连接请求。如果stream值为true,则创建流Socket对象,否则创建数据报Socket 对象。n参数:address:服务器IP地址

19、。port:端口号。stream:创建流Socket对象或创建数据报Socket对象的标志。n若生成Socket时发生I/O错误则抛出IOException异常。n(5)public Socket(InetAddress address,int port,InetAddress localAddr,int localPort)nthrows IOExceptionn功能:生成一个Socket并且连接到由address指定的服务器的端口port上。该Socket将捆绑到由localAddr指定的本地主机的localPort端口上。n参数:address:服务器IP地址。port:端口号。loca

20、lAddr:本地主机的IP地址。localPort:本地主机上的端口号。n若生成Socket时发生I/O错误则抛出IOException异常。n(6)public Socket(String host,int port,InetAddress localAddr,int localPort)nthrows IOExceptionn功能:生成一个Socket并且连接到由host指定的服务器的端口port上。该Socket将捆绑到由localAddr指定的本地主机的localPort端口上。n参数:host:服务器名。port:端口号。localAddr:本地主机的IP地址。localPort:本

21、地主机上的端口号。n若生成Socket时发生I/O错误则抛出IOException异常。n(7)protected Socket(SocketImpl impl)throws SocketExceptionn功能:根据用户指定的SocketImpl生成一个无连接的socket。n参数:impl:子类希望用在Socket上的SocketImpl 实例。n建立无连接失败时抛出SocketException异常。n客户端流Socket的创建可通过使用Socket类的构造函数完成。构造函数不仅可以创建Socket对象,并且会尝试连接服务器端的Socket。可通过这个方法测试某个端口的连接是否允许。2与

22、Socket数据读写有关的常用方法 n(1)public InetAddress getInetAddress()n功能:获取创建socket连接时指定服务器的IP地址。n(2)public InetAddress getLocalAddress()n功能:获取创建socket连接时客户端主机的IP地址。n(3)public int getPort()n功能:获取创建Socket连接时指定的服务器的端口号。n(4)public int getLocalPort()n功能:获取创建Socket连接时客户端的端口号。n(5)public InputStream getInputStream()th

23、rows IOExceptionn功能:为当前的socket对象创建输入流。n(6)public OutputStream getOutputStream()throws IOExceptionn功能:为当前的socket对象创建输出流。n(7)public String toString()n功能:转换该Socket成一个String.字符串表示。3关闭Socket连接的方法npublic synchronized void close()throws IOExceptionn功能:关闭建立的Socket连接。当通信结束时,应调用该方法关闭Socket连接。n若在关闭Socket连接时发生I

24、/O错误则抛出IOException异常。【例7.1】SocketInfo.java import .*;import java.io.*;public class SocketInfopublic static void main(String args)try Socket sktobj=new Socket(,80);System.out.println(1:connect to+sktobj.getInetAddress()+on port+sktobj.getPort();/获取服务器的IP地址和端口号【例7.1】SocketInfo.java System.out.println(

25、2:from port+sktobj.getLocalPort()+of+sktobj.getLocalAddress();/获取客户端的IP地址和端口号catch(UnknownHostException e)System.out.println(e);catch(IOException e)System.out.println(e);【例7.2】SocketAppClient.java import .*;import java.io.*;public class SocketAppClientpublic static void main(String args)int port=134

26、;trySocket sc=new Socket(127.0.0.1,port);/创建本地Socket连接OutputStream out=sc.getOutputStream();DataOutputStream dout=new DataOutputStream(out);/获取输出流,并创建相应的数据输出流 dout.writeUTF(Tom);/将“Tom”写入输出流 InputStream in=sc.getInputStream();DataInputStream din=new DataInputStream(in);【例7.2】SocketAppClient.java/获取输

27、入流,并创建相应的数据输入流 String str=din.readUTF();/从输入流中读取数据 System.out.println(str);/将读取的数据显示 in.close();out.close();sc.close();/关闭相应流及Socket连接catch(UnknownHostException e)System.out.println(e);catch(IOException e)System.out.println(e);7.3.2 ServerSocket类nServerSocket类用在服务器端,侦听和响应客户端的连接请求,并接收客户端发送的数据。nServer

28、Socket类的主要任务是在服务器端耐心地等候客户端的连接请求,一旦客户端应用程序申请建立一个Socket连接,ServerSocket类就会通过accept()方法返回一个对应的服务器端Socket对象,以便进行直接通信。从两台计算机连接成功时起,服务器端与客户端就得到了一个真正的“Socket-Socket”连接。1ServerSocket类构造函数n功能:创建一个指定端口号的服务器端的socket。请求连接队列的最大队列长度为50,若连接请求到达时队列已满,则拒绝连接。端口号为0指在任何空闲端口上创建socket。n参数:nport:端口号。n若无法创建Socket并绑定于所请求的端口号

29、则抛出IOException异常。n(2)public ServerSocket(int port,int backlog)throws IOExceptionn功能:创建一个指定端口号的服务器端的socket。请求连接队列的最大队列长度设置为backlog,若连接请求到达时队列已满,则拒绝连接。端口号为0指在任何空闲端口上创建socket。n参数:nport:端口号。nbacklog:请求连接队列的最大长度。n若无法创建Socket并绑定于所请求的端口号则抛出IOException异常。n(3)public ServerSocket(int port,int backlog,InetAddr

30、ess bindAddr)throws IOExceptionn功能:创建一个指定端口号的服务器端的socket。请求连接队列的最大队列长度设置为backlog,若连接请求到达时队列已满,则拒绝连接。端口号为0指在任何空闲端口上创建socket。与其它构造函数不同的是,该构造函数要指定要绑定到的本地IP地址。主要用于在多IP地址系统上运行的服务器。此时,它允许先把所侦听的地址,服务器Socket只在指定的地址侦听入站连接,不会侦听通过主机其他地址进入的连接。其他构造函数默认绑定本地主机的所有IP地址。当bindAddr为null时,缺省地接受对任何所有本地IP地址的连接。【例7.3】PortS

31、can2.java import .*;import java.io.*;public class PortScan2public static void main(String args)String host=localhost;for(int i=130;i140;i+)tryServerSocket a=new ServerSocket(i);/在端口号i创建连接System.out.println(there is a server on port:+i);/若可以创建连接,则输出提示信息catch(IOException e)System.out.println(e);/若端口已被

32、占用,则抛出异常2ServerSocket类的常用方法n(1)public InetAddress getInetAddress()n功能:获取服务器端Socket的IP地址。n(2)public int getLocalPort()n功能:获取服务器正侦听的端口号。n(3)public Socket accept()throws IOExceptionn功能:在服务器端指定端口侦听客户端发出的连接请求并与之连接。该方法一直阻塞直到连接成功。该方法返回一个新的Socket对象,通过该对象与客户端进行通信。n若等待连接时发生I/O错误则抛出IOException异常。n(4)public Str

33、ing toString()n功能:返回该socket的字符串表示 3关闭Socket连接的方法npublic void close()throws IOExceptionn功能:关闭该socket连接。当服务器需要关闭,不处理任何其他入站连接时,调用该方法。n若关闭socket时发生I/O错误则抛出IOException异常。7.4 Socket编程应用举例7.4.1 Socket编程的基本步骤 n1服务器端应用程序编写步骤n(1)创建一个等待连接的ServerSocket对象,如Sersocket;n(2)调用Sersocket对象的accept()方法侦听接收客户端的连接请求。当侦听到一

34、个客户的连接请求时,连接成功,并返回一个用于通信的Socket对象;n(3)创建与Socket对象绑定的输入输出流,并建立相应的数据输入输出流;n(4)通过数据输入输出流与客户端进行数据读写,完成双向通信;n(5)当客户端断开连接时,关闭各个流对象,结束通信。n(2)(5)可循环执行。n2客户端应用程序编写步骤n(1)创建指定服务器上指定端口号的Socket对象;n(2)创建与Socket对象绑定的输入输出流,并建立相应的数据输入输出流;n(3)通过数据输入输出流与服务器端进行数据读写,完成双向通信;n(4)通过调用close()方法关闭与服务器端的连接,并关闭各个流对象,结束通信。7.4.2

35、单客户/服务器Socket编程应用举例 n【例7.5】编写一个基于TCP协议的Socket网络点对点聊天程序,可实现客户端和服务器端信息的互发。n1服务器端程序talkserver.javan2客户端程序talkclient.java7.4.3多客户/服务器Socket编程应用举例n【例7.6】多客户/服务器程序。n1服务器端程序n(1)ServerSocketThread.java:线程子类,实现与客户的数据通信。n(2)MultitalkServer.java:应用程序,等待并侦听多个客户的连接。n2客户端程序n(1)ClientSocketThread.java:客户端线程子类,实现和服

36、务器的数据通信n(2)TalkClient1.java和TalkClient2.java:建立和服务器通信的客户1和客户2本章小结nTCP/IP协议nClient/Server模式n套接字(Socket)概念nSocket类nServerSocket类n基于TCP协议的Socket编程的基本步骤n单客户/服务器Socket编程应用n多客户/服务器Socket编程应用第8章 基于UDP协议的Socket编程 第8章 基于UDP协议的Socket编程8.1 UDP协议8.2 DatagramPacket类和DatagramSocket类 8.2.1 DatagramPacket类 8.2.2 Da

37、tagramSocket类8.3 基于UDP协议的Socket编程 8.3.1 基于UDP协议的Socket编程的基本步骤 8.3.2 应用举例本章小结8.1 UDP协议n用户数据报协议(User Datagram Protocol,UDP)是OSI参考模型中一种面向无连接的传输层协议,提供面向操作的简单的不可靠数据传送服务。在网络中它与TCP协议一样用于处理数据包。UDP 协议直接工作于IP协议的顶层。nUDP协议在发送数据时并不刻意追求数据包会完全发送出去,也不能担保它们抵达的顺序与它们发出时一样,因为它是一种不可靠协议。UDP协议的特性:n(1)UDP是一个面向无连接的协议,传输数据之前

38、客户端和服务器端不建立连接,当它想发送数据时则获取来自应用程序的数据,并尽可能快地把它放到网络上。n(2)由于传输数据时不需建立连接,不需维护连接状态,因此一台服务器可同时向多个客户传输相同的数据。UDP使用的类nDatagramPacket类包含具体的要传输的信息,这些信息被封装在称为数据报(Datagram)的UDP包中。nDatagramSocket类用于收发UDP数据报。n为发送数据,要将数据封装到DatagramPacket中,使用DatagramSocket发送该包。为接收数据,要从DatagramSocket中接收一个DatagramPakcet对象,然后解析该包的内容。UDP与

39、TCP的比较 n(1)UDP没有两台主机间唯一连接的概念。使用UDP时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。对于TCP协议,由于它是一个面向连接的协议,在Socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间。n(2)一个DatagramSocket可以从多个独立主机接收数据,也可向多个主机传输相同的数据,此Socket并不专用于一个连接。n(3)TCP Socket将网络视为流,通过与Socket相关的输入输出流来收发数据。而UDP所处理的总是单个数据报包,封装在一个数据报中的数据都以一个包的形式整体收发,一个包不需与其它包相

40、关。流中的数据是有序的,而数据报包与数据报包之间是无序的。n(4)使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。8.2 DatagramPacket类和DatagramSocket类 n8.2.1 DatagramPacket类 n该类表示一个数据报包。该数据报包用来实现一个无连接包的传送服务。它是进行数据报通信的基本单位。包含了IP地址、端口号和需要传输的数据等。在发送和接收数据报时,要创建DatagramPakcet类对象作为数据的载体。1构造函数n(1)publ

41、ic DatagramPacket(byte ibuf,int ilength)n功能:创建一个用于接收数据报的DatagramPacket类对象。n参数:nibuf:存储数据报的缓冲区。在数据报通信中,发送和接收一个数据报,都需提供一个缓冲区,用来安置发送和接收到的数据报。nilength:接收数据报的长度,必须小于等于ibuf.length。n(2)public DatagramPacket(byte ibuf,int ilength,InetAddress iaddr,int iport)n功能:创建一个用于发送数据报的DatagramPacket类对象。n参数:nibuf:存储数据报的

42、缓冲区。nilength:发送数据报的长度,必须小于等于ibuf.length。niaddr:数据报要发送到的目的IP地址。niport:数据报要发送到的目的地址的端口号。2常用方法n(1)public synchronized InetAddress getAddress()n功能:返回存放在接收或发送的数据报中的IP地址。n(2)public synchronized int getPort()n功能:返回存放在接收或发送的数据报中的端口号。n(3)public synchronized byte getData()n功能:返回存放在数据报中的数据。n(4)public synchroni

43、zed int getLength()n功能:返回数据报中数据的长度。n(5)public synchronized void setAddress(InetAddress iaddr)n功能:设置发送数据报的目的地址为iaddr。n(6)public synchronized void setPort(int iport)n功能:设置发送数据报的目的地址的端口号为iport。n(7)public synchronized void setData(byte ibuf)n功能:设置数据报中的数据内容为字节数组ibuf的数据。n(8)public synchronized void setLen

44、gth(int ilength)n功能:设置数据报中的数据的长度为ilength。n该类表示用来发送和接收数据报包的套接字(Socket)。要收发DatagramPacket,必须打开一个数据报套接字(Datagram Socket)。在Java中,数据报套接字通过DatagramSocket类来创建和访问。8.2.2 DatagramSocket类1构造函数n(1)public DatagramSocket()throws SocketExceptionn功能:创建用于数据报通信的socket对象,由本地主机自动指定的一个可用的端口号。n(2)public DatagramSocket(in

45、t port)throws SocketExceptionn功能:创建用于数据报通信的socket对象,并且把它绑定到本地主机指定的端口port。n(3)public DatagramSocket(int port,InetAddress addr)throws SocketExceptionn功能:创建用于数据报通信的socket对象,并绑定到指定的本地地址addr的指定端口port。端口号port必须为0和65535之间的一个。2常用方法n(1)public void send(DatagramPacket p)throws IOExceptionn功能:从此socket发送数据报包。n(

46、2)public synchronized void receive(DatagramPacket p)throws IOExceptionn功能:从网络接收一个UDP数据报包。存储在DatagramPacket类对象p中。该数据报包还包含发送方的IP 地址和发送方主机的端口号。n(3)public InetAddress getLocalAddress()n功能:获取该socket绑定的本地地址。n(4)public int getLocalPort()n功能:获取该socket绑定的本地主机的端口号。n(5)public void close()n功能:释放该数据报socket所占用的端口

47、。例子n【例8.1】获取本地主机的时间,通过UDP实现。n(1)服务器端程序TimeServer_UDP.javan(2)客户端程序TimeClient_UDP.java8.3 基于UDP协议的Socket编程 n8.3.1基于UDP协议的Socket编程的基本步骤n开发基于UDP协议的网络应用程序时,需分别编写客户端和服务器端两个应用程序,这两个程序的基本架构相似。基本步骤如下:n(1)建立一个DatagramSocket对象;n(2)创建用于接收或发送数据的DatagramPacket对象;n(3)利用DatagramSocket类方法receive()或send()接收或发送数据报包。1

48、服务器端程序具体开发步骤n(1)建立一个DatagramSocket对象;n(2)进入收发数据报包的循环,直到客户端数据传送完毕。循环过程如下:n1)创建一个用于接收数据的DatagramPakcet对象;n2)利用DatagramSocket类方法receive()等待接收客户端的数据报包;n3)处理客户端数据报包内容;n4)创建一个用于发送响应信息数据的DatagramPakcet对象;n5)利用DatagramSocket类方法send()向客户端发送包含响应信息的数据报包;n(3)客户端数据传送完毕,释放Socket。2客户端程序具体开发步骤n(1)建立一个DatagramSocket

49、对象;n(2)进入发收数据报包的循环,直到数据传送完毕。循环过程如下:n1)创建一个用于发送数据的DatagramPakcet对象,并将要发送的数据封装到该数据报包;n2)利用DatagramSocket类方法send()向服务器端发送数据报包;n3)创建一个用于接收响应信息数据的DatagramPakcet对象;n4)利用DatagramSocket类方法receive()等待接收服务器端包含响应信息的数据报包;n5)处理服务器端数据报包内容。n(3)数据传送完毕,释放Socket。8.3.2 应用举例n【例8.2】编写一个基于UDP协议的Socket网络点对点聊天程序,可实现客户端和服务器端信息的互发。n1编写服务器端程序Serverapp_UDP.javan2编写客户端程序Clientapp_UDP.java本章小结nUDP协议的有关知识nDatagramPacket类的主要方法及应用nDatagramSocket类的主要方法及应用n基于UDP协议的Socket编程的基本步骤n基于UDP协议的Socket编程实例

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!