2java网络编程.ppt

上传人:asd****56 文档编号:87337832 上传时间:2023-04-16 格式:PPT 页数:64 大小:337.50KB
返回 下载 相关 举报
2java网络编程.ppt_第1页
第1页 / 共64页
2java网络编程.ppt_第2页
第2页 / 共64页
点击查看更多>>
资源描述

《2java网络编程.ppt》由会员分享,可在线阅读,更多相关《2java网络编程.ppt(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第1616章章网络编程网络编程主要内容主要内容URL类类InetAdress类类套接字套接字UDP数据报数据报广播数据报广播数据报Java远程调用(远程调用(RMI)难点难点套接字套接字Java远程调用(远程调用(RMI)导读导读 本章重点介绍URL、Socket、InetAddress和DatagramSocket类在网络编程中的重要作用,以及远程调用的基础知识。Java的网络功能由几个不同的包实现,基本的的网络功能由几个不同的包实现,基本的网络功能定义在网络功能定义在包中。包中。其中的接口和类可以大致分为三部分:其中的接口和类可以大致分为三部分:URL、URLConnection、Soc

2、ket本章将讨论如何使用这些类和接口进行网络编程,本章将讨论如何使用这些类和接口进行网络编程,实现网络资源的访问和网络通信。实现网络资源的访问和网络通信。16.1 网络编程基础知识 TCP/IP采用层次化体系结构,从上至下分采用层次化体系结构,从上至下分为四层:应用层、传输层、网络层和数据链为四层:应用层、传输层、网络层和数据链路层,每一层都实现特定的网络功能。路层,每一层都实现特定的网络功能。1)应用层)应用层2)传输层)传输层3)网络层)网络层 4)数据链路层)数据链路层这四层结构中比较常见的协议有如下几种:这四层结构中比较常见的协议有如下几种:1)IP协议协议 2)TCP协议协议 3)U

3、DP协议协议 4)HTTP 5)FTP 6)SMTP 7)POP3 8)IMAPIP地址地址 连接到连接到Internet中的每台计算机都有唯一中的每台计算机都有唯一的地址,这就是的地址,这就是IP地址。一个地址。一个IP地址由地址由域名、端口号和服务类型组成。域名、端口号和服务类型组成。16 IP地址及URL类 J.InetAddress类类是是Java的的IP地址的地址的封装类,用于实现对封装类,用于实现对IP地址的各种操作。地址的各种操作。它不需要用户了解如何实现对它不需要用户了解如何实现对IP地址操地址操作的细节。作的细节。Internet用用URL表示各种网络数据资源的表示各种网络数

4、据资源的地址。通过地址。通过URL用户可以访问用户可以访问Internet上上的各种网络资源。为了处理方便,的各种网络资源。为了处理方便,Java将将URL封装为封装为URL类类。16.1 URL类类 通过通过URL可以访问可以访问Internet上的各种网络资源。上的各种网络资源。URL的基本结构由如的基本结构由如下下5部分组成:部分组成:/:/#传输协议传输协议(protocol):有有HTTP、FTP、File等。默认为等。默认为HTTP协议。协议。主机名主机名(hostname):指定资源所在的主机名。主机名可以是指定资源所在的主机名。主机名可以是IP地址,也地址,也可以是主机的名字或

5、者域名。可以是主机的名字或者域名。端口号端口号(port):端口号用来区分一个计算机中提供的不同服务,如端口号用来区分一个计算机中提供的不同服务,如Web服务、服务、FTP服务等。每一种服务都用一个端口号,范围是服务等。每一种服务都用一个端口号,范围是065535。在。在URL中,中,hostname后面的冒号及端口号是可以省略的,后面的冒号及端口号是可以省略的,HTTP的默认的默认端口号是端口号是80。文件名文件名(filename):文件名包括该文件的完整路径。在文件名包括该文件的完整路径。在HTTP协议中,有协议中,有一个默认的文件名是一个默认的文件名是index.html,因此,因此,

6、http:/与与http:/ URL(String spec):使用:使用URL字符串构造一个字符串构造一个URL对象对象(2)public URL(URL context,String spec):用已经存在的用已经存在的URL对象对象contex创建创建URL对象。对象。Context指事先创建的某个指事先创建的某个URL对象,对象,spec通常是通常是context上的某个文件或子目录。上的某个文件或子目录。(3)public URL(String protocol,String host,String file):用指用指定的协议、主机名、文件路径及文件名创建一个定的协议、主机名、文件

7、路径及文件名创建一个URL对象;对象;(4)public URL(String protocol,String host,int port,String file):用指定的协议、主机名、端口号、文件路径及文件名用指定的协议、主机名、端口号、文件路径及文件名创建一个创建一个URL对象。第一个对象。第一个String类型的参数是协议的类型,类型的参数是协议的类型,可以是可以是HTTP、FTP等。第二个等。第二个String类型参数是主机上的类型参数是主机上的某个文件某个文件(可以包括目录可以包括目录),int类型参数是指定端口号,最后类型参数是指定端口号,最后一个参数给出文件名或路径名。一个参数

8、给出文件名或路径名。URL类中的主要方法类中的主要方法 方法名功能说明public String getProtocol()获取该URL的协议名public String getHost()获取该URL的主机名public int getPort()获取该URL的端口号。若无端口,返回-1public String getFile()获取该URL中的文件名public String getContent()获取传输协议public String toString()将URL转化为字符串InputStream openStream()打开该URL的输入流public String getUser

9、Info()获取使用者的信息public String getPath()获取该URL的路径URLConnection openConnection()打开由该URL标识的位置的连接void set(string protocol,string host,int prot,string file,string ref)设置该URL的各域的值例例 创建一个创建一个URL对象,并输出该对象,并输出该URL对象的信息。对象的信息。/file name:CreateURL.javaimport .*;import java.io.*;public class CreateURL public stat

10、ic void main(String args)try URL url=new URL(http:/:80/downloads/index.htm);System.out.println(the Protocol:+url.getProtocol();System.out.println(the hostname:+url.getHost();System.out.println(the Port:+url.getPort();System.out.println(the file:+url.getFile();System.out.println(url.toString();catch(

11、MalformedURLException e)System.out.println(e);16.2.1 InetAddress类类 Java提供了提供了InetAddress类,类,用于实现主机名用于实现主机名和和IP地址之间的转换。地址之间的转换。InetAddress类描述了类描述了32位或位或64位的位的IP地址,并地址,并通过它的两个子类通过它的两个子类Inet4Address 和和 Inet6Address来实现。来实现。16.2InetAddress类类 InetAddress类的定义如下:类的定义如下:public final class InetAddress extends

12、 object implements Serializable 其中:其中:String类型的类型的hostName和和int类型的类型的address,即主机名和,即主机名和IP地址。由于它们是私地址。由于它们是私有成员,因此不能直接访问它们。有成员,因此不能直接访问它们。由于由于InetAddress类类没有构造方法没有构造方法,所,所以也以也不能不能直接创建直接创建InetAddress对象。对象。要创建该类的实例对象,可以通过该类要创建该类的实例对象,可以通过该类的静态方法获得该对象。的静态方法获得该对象。找不到本地机器的地址时,这些方法通找不到本地机器的地址时,这些方法通常会抛出常会

13、抛出UnknownHostException异常,异常,所以应该在程序中进行异常处理。所以应该在程序中进行异常处理。.InetAddress类的类的主要方法主要方法方法名方法名功能说明功能说明static InetAddress getLocalHost()获得本地主机的获得本地主机的InetAddress对象对象static InetAddress getByName(String host)通过主机名获取通过主机名获取IP地址地址static InetAddress getByAddress(byte addr)根据给定的根据给定的IP地址创建一地址创建一个个InetAddress对象的引

14、用对象的引用static InetAddress getAllByName(String host)通过主机名获取所有的通过主机名获取所有的IP地址地址String getHostAddress()以带圆点的字符串形式获以带圆点的字符串形式获取取IP地址地址String getHostName()获取主机名字获取主机名字 1)public static InetAddress getLocalHost()该方法返回一个该方法返回一个InetAddress对象,这个对象包含了本地对象,这个对象包含了本地机的机的IP地址。当查找不到本地机的地址时,将会抛出一地址。当查找不到本地机的地址时,将会抛出

15、一个个UnknownHostException异常。异常。2)public static InetAddress getByName(String host)该方法返回一个由该方法返回一个由host指定的指定的InetAddress对象,参数对象,参数host可以是一个主机名,也可以是一个可以是一个主机名,也可以是一个IP地址或者一个地址或者一个DNS域名。如果找不到指定的主机的域名。如果找不到指定的主机的IP地址,那么该方法将地址,那么该方法将抛出一个抛出一个UnknownHostException异常。异常。3)public static InetAddress getByAddress(

16、byte addr)根据给定的根据给定的IP字节地址创建一个字节地址创建一个InetAddress对象的引用。如果对象的引用。如果addr是是IPv4地址,则返回一个地址,则返回一个Inet4Address对象。如果对象。如果addr是是IPv6地址,则返回一地址,则返回一个个Inet6Address对象。如果返回的既不是对象。如果返回的既不是4字节的也不是字节的也不是16字节的,那么字节的,那么方法将会抛出一个方法将会抛出一个UnknownHostException异常。异常。4)public static InetAddress getAllByName(String host)在在Int

17、ernet上,可以用相同的名字代表一组计算机,如上,可以用相同的名字代表一组计算机,如就可以对应就可以对应3个不同的地址,在主机被访问时随个不同的地址,在主机被访问时随机选择一个地址。机选择一个地址。getAllByName(String host)用来获取具有用来获取具有相同名字的主机的地址对象,并存放在一个地址对象数组中。相同名字的主机的地址对象,并存放在一个地址对象数组中。出错了同样会抛出出错了同样会抛出UnknownException异常。异常。5)public Sring getHostAddress()该方法将该方法将IP地址以网络字节顺序的字节数组的形式返地址以网络字节顺序的字节

18、数组的形式返回。由于回。由于IPV4只有只有4个字节,个字节,IPV6有有16个字节,如个字节,如果需要知道数组的长度,可以用数组的果需要知道数组的长度,可以用数组的length字段获字段获得。得。6)public Sring getHostName()getHostName()方法方法返回一个字符串形式的主机名字。如果被查询的机返回一个字符串形式的主机名字。如果被查询的机器没有主机名,或者如果使用了器没有主机名,或者如果使用了Applet,但是它的,但是它的安全性却禁止查询主机名,则该方法就返回一个具安全性却禁止查询主机名,则该方法就返回一个具有点分形式的数字有点分形式的数字IP地址。地址。

19、获得一个获得一个InetAddress对象后,就可以使用对象后,就可以使用InetAddress类的类的getAddress()方法获得本机对象的方法获得本机对象的IP地址(存放在字地址(存放在字节数组中);节数组中);使用使用getHostAddress()方法获得本机对象的方法获得本机对象的IP地址;地址;使用使用getHostName()方法获得主机名。方法获得主机名。例例 InetAddress类的类的getByName()方法的使用示例。方法的使用示例。/file name:InetAddressTest.javaimport .*;public class InetAddressT

20、est public static void main(String args)try InetAddress address_1=InetAddress.getByName();System.out.println(address_1.toString();InetAddress address_2=InetAddress.getByName(202.118.11.13);System.out.println(address_2.toString();catch(UnknownHostException e)System.out.println(无法找到无法找到 );16.3 Socket通

21、信 根据传输的数据类型不同,套接字可以分根据传输的数据类型不同,套接字可以分为两种类型为两种类型:面向连接的面向连接的数据流套接字数据流套接字(Stream Socket)无连接的无连接的数据报套接字数据报套接字(Datagram Socket)。套接字套接字(Socket)套接字(套接字(socketsocket)是网络上运行的两个是网络上运行的两个不同主机的进程间进行双向通信的端点,不同主机的进程间进行双向通信的端点,用于建立两个不同应用程序之间通过网用于建立两个不同应用程序之间通过网络进行通信的信道。络进行通信的信道。套接字套接字(Socket)一般来说,位于不同主机的应用进程之间要一般

22、来说,位于不同主机的应用进程之间要在网络环境下进行通信,必须要在在网络环境下进行通信,必须要在网络的每网络的每一端一端都要建立一个套接字。都要建立一个套接字。两个套接字之间可以是两个套接字之间可以是 有连接的,也可以有连接的,也可以是无连接的,是无连接的,并通过套接字的读、写操作实并通过套接字的读、写操作实现网络通信功能。现网络通信功能。套接字由套接字由IP地址地址和和 端口端口 组成。它既可以接收请求,也可以发组成。它既可以接收请求,也可以发送请求,因此利用它可以较为方便地送请求,因此利用它可以较为方便地编写网络上数据传输的程序。编写网络上数据传输的程序。根据传输的数据类型不同,套接字可以分

23、为根据传输的数据类型不同,套接字可以分为面向连接的数据流套接字面向连接的数据流套接字(Stream Socket)无连接的数据报套接字无连接的数据报套接字(Datagram Socket)两种类型。其中,两种类型。其中,TCP套接字套接字是面向连接的套接字的代表是面向连接的套接字的代表UDP套接字套接字是无连接的数据报套接字的代表是无连接的数据报套接字的代表。16.3 Socket通信 Stream Sockets套接字用于在主机和套接字用于在主机和Internet之之间建立可靠的、双向的、持续的、点对点的流式间建立可靠的、双向的、持续的、点对点的流式连接。这种流式连接的优点是所有数据都能准确

24、、连接。这种流式连接的优点是所有数据都能准确、有序地传送到接收方,缺点是速度较慢。其中,有序地传送到接收方,缺点是速度较慢。其中,TCP套接字套接字是面向连接的套接字的代表是面向连接的套接字的代表UDP套接字套接字是无连接的数据报套接字的代表。是无连接的数据报套接字的代表。16.3.1 Socket的通信机制的通信机制 由于基于套接字的程序设计涉及到通信的由于基于套接字的程序设计涉及到通信的两端,即两端,即服务器端服务器端和和客户端客户端,因此在开发通,因此在开发通信程序时,要对服务器端套接字和客户端套信程序时,要对服务器端套接字和客户端套接字分别进行设计。接字分别进行设计。一个服务器端套接字

25、的一个服务器端套接字的ServerSocketServerSocket类类,另一个是客户端套接字的另一个是客户端套接字的SocketSocket类类。2.ServerSocket类类 ServerSocket类用在服务器端,用来监听所有来自指定类用在服务器端,用来监听所有来自指定端口的连接,并为每个新的连接创建一个端口的连接,并为每个新的连接创建一个Socket对象。对象。之后客户端便可以与服务器端开始通信了。之后客户端便可以与服务器端开始通信了。ServerSocket类的几个构造方法如下:类的几个构造方法如下:ServerSocket(int port):在指定端口上创建一个在指定端口上创

26、建一个ServerSocket类对象。类对象。ServerSocket(int port,int backlog):在指定端口上创建在指定端口上创建一个一个ServerSocket类对象,并进入监听状态,第二个类对象,并进入监听状态,第二个int类型的参数类型的参数backlog是服务器忙时保持连接请求的等待客是服务器忙时保持连接请求的等待客户数量。户数量。ServerSocket(int port,int backlog,InetAddress bindAddr)使用指定的端口和和要绑定到的服务器使用指定的端口和和要绑定到的服务器 IP 地址创建一个地址创建一个ServerSocket类对象

27、,并进入监听状态。类对象,并进入监听状态。例如:例如:ServerSocket server=new ServerSocket(80,100);Socket client=new Socket(127.0.0.1.,80);如果运行时无法绑定到如果运行时无法绑定到 80 端口端口,以上代码会抛出以上代码会抛出 IOException,更确切地说更确切地说,是抛出是抛出 BindException,它是它是 IOException 的子类。的子类。ServerSocket类的主要方法类的主要方法方法名功能说明Socket accept()接收该连接并返回该连接的Socket对象void clos

28、e()关闭此服务器的SocketInetAddress getInetAddress()获取该服务器Socket所绑定的地址int getLocalPort()获取该服务器Socket所侦听的端口号int getSoTimeout()获取连接的超时数void setSoTimeout(int timeout)设置连接的超时数,参数表示 ServerSocket 的 accept()方法等待客户连接的超时时间。如果参数值为 0,表示永远不会超时,进入阻塞状态 这也是它的默认值 Socket类类 客户端可以通过构造一个客户端可以通过构造一个Socket类对象来建立类对象来建立 与服务器的连接。基于

29、与服务器的连接。基于Socket的连接可以是流连接,的连接可以是流连接,也可以是数据报连接,这取决于构造也可以是数据报连接,这取决于构造Socket类时使用类时使用的构造方法。这里先讨论流式连接。的构造方法。这里先讨论流式连接。Socket类的构造类的构造方法有如下方法有如下6种:种:Socket():创建一个套接字对象,该对象不请求任何创建一个套接字对象,该对象不请求任何连接。连接。Socket(String host,int port)创建一个创建一个Socket对象,请求与对象,请求与host指定的服务器通过指定的服务器通过port端口建立连接端口建立连接Socket(String ho

30、st,int port,boolean type)创建一个连接指定主机、指定端口的创建一个连接指定主机、指定端口的Socket类,类,boolean类型的参数用来设置是流式类型的参数用来设置是流式Socket还是数据报还是数据报Socket。Socket(InetAddress,int)创建一个连接指定创建一个连接指定Internet地址、指定端口的流式地址、指定端口的流式Socket类对象类对象 Socket(InetAddress,int,Boolean stream)创建一个连接指定创建一个连接指定Internet地址、指定端口的地址、指定端口的Socket类类 对象,对象,boolea

31、n类型的参数用来设置是流式类型的参数用来设置是流式Socket还是还是 数据报数据报Socket。Socket(String host,int port,InetAddress localAddr,int localport)以本地主机以本地主机localAddr的的localport端口创建一个端口创建一个Socket 类对象,并请求和类对象,并请求和host指定的服务器通过指定的服务器通过port端口建立端口建立 连接。连接。方法名功能说明void close()关闭Socket连接InetAddress getInetAddress()获取当前连接的远程主机的Internet地址Inpu

32、tStream getInputStream()获取Socket对应的输入流InetAddress getLocalAddress()获取本地主机的Internet地址int getLocalPort()获取本地连接的端口号OutputStream getOutputStream()获取该Socket的输出流int getPort()获取远程主机端口号void shutdownInput()关闭输入流void shutdownOutput()关闭输出流Socket类的主要方法类的主要方法ServerClientServerSocket(int port)Socket.accept()Socke

33、t(InetAddress addressint port)OutputStreamSocket.getOutputStream()InputStreamSocket.getInputStream()Socket.Close()OutputStreamSocket.getOutputStream()InputStreamSocket.getInputStream()Socket.Close()16.3.2 16.3.2 实现实现SocketSocket通信通信服务器程序编写:服务器程序编写:用用ServerSocketServerSocket()()创建一个服务器端套接字,创建一个服务器端套接

34、字,并指定端口并指定端口用用accept()accept()监听连接请求,如果有接接,则监听连接请求,如果有接接,则接受,返回通信套接字;接受,返回通信套接字;调用调用SocketSocket类的类的getOutputStreamgetOutputStream()()和和getInputStreamgetInputStream()()开始网络数据的发送和接收。开始网络数据的发送和接收。最后关闭通信套接字。最后关闭通信套接字。用户程序编写:用户程序编写:用用Socket()Socket()创建一个流套接字,创建一个流套接字,调用调用SocketSocket类的类的getOutputStreamg

35、etOutputStream()()和和getInputStreamgetInputStream()()获取输出流和输入流,开始网络数据的发获取输出流和输入流,开始网络数据的发送和接收。送和接收。最后关闭通信套接字。最后关闭通信套接字。import java.io.*;import .*;public class TcpServer public static void main(String args)throws Exception ServerSocket ss=new ServerSocket(6666);while(true)Socket s=ss.accept();/接收连接的套接

36、字接收连接的套接字 InputStream is=s.getInputStream();/获得输入流获得输入流 DataInputStream ds=new DataInputStream(is);System.out.println(ds.readUTF(ds);System.out.println(a client linked!);ds.close();/关闭输入流关闭输入流 s.close();/关闭套接字关闭套接字 import java.io.*;import .*;public class TcpClient public static void main(String args

37、)try Socket s=new Socket(127.0.0.1,6666);OutputStream os=s.getOutputStream();DataOutputStream dos=new DataOutputStream(os);dos.writeUTF(hello server);dos.close();s.close();catch(UnknownHostException ex)catch(IOException ex)C/SC/S端都要发送数据端都要发送数据,怎么办怎么办?public class TcpServer public static void main(St

38、ring srgs)throws Exception ServerSocket sc=new ServerSocket(4421);Socket s=sc.accept();System.out.println(服务器已经启动服务器已经启动.);DataOutputStream dos=new DataOutputStream (s.getOutputStream();DataInputStream dis=new DataInputStream (s.getInputStream();ServerReaderThread reader=new ServerReaderThread(dis);

39、ServerWriterThread writer=new ServerWriterThread(dos);reader.start();writer.start();class ServerReaderThread extends Thread DataInputStream dis;public ServerReaderThread(DataInputStream dis)this.dis=dis;public void run()String info=null;while(true)try info=dis.readUTF();/读取客户端发送的信息读取客户端发送的信息 catch(I

40、OException ex)ex.printStackTrace();System.out.println(对方说:对方说:+info);/打印客户端发送打印客户端发送的信息的信息 if(info.equals(exit)System.out.println(对方下线,程序退出!对方下线,程序退出!);break;class ServerWriterThread extends Thread DataOutputStream dos;public ServerWriterThread(DataOutputStream dos)this.dos=dos;public void run()Stri

41、ng info=null;BufferedReader br=new BufferedReader(new InputStreamReader(System.in);while(true)try info=br.readLine();dos.writeUTF(info);catch(IOException ex)ex.printStackTrace();if(info.equals(exit)System.out.println(自己下线,程序退出!自己下线,程序退出!);System.exit(0);public class TcpServer public static void main

42、(String srgs)throws Exception ServerSocket sc=new ServerSocket(4421);Socket s=sc.accept();System.out.println(服务器已经启动服务器已经启动.);DataOutputStream dos=new DataOutputStream (s.getOutputStream();DataInputStream dis=new DataInputStream (s.getInputStream();ServerReaderThread reader=new ServerReaderThread(di

43、s);ServerWriterThread writer=new ServerWriterThread(dos);reader.start();writer.start();为什么没为什么没有关闭套有关闭套接字接字?客户端应该怎么样写?16.4 数据报通信 TCP/IPTCP/IP是一种面向连接的协议,而是一种面向连接的协议,而UDPUDP是是一种无连接一种无连接的协议,它只是将数据的目的的协议,它只是将数据的目的地写在数据报中,然后直接放在网络上,地写在数据报中,然后直接放在网络上,不保证传输质量。不保证传输质量。发送端发送端接收端接收端DatagramPacket PK/打包数据打包数据D

44、atagramSocket()/指定发送的套接字指定发送的套接字DatagramSocket.send(Pk)/送出数据包送出数据包Socket.Close()Socket.Close()16.4.1 16.4.1 实现实现UDPUDP通信通信DatagramSocket(port)/接收指定端口的套接字接收指定端口的套接字Byte buf/存放数据的数据存放数据的数据DatagramPacket PK/存放接受到的数据包存放接受到的数据包DatagramSocket.receive(Pk)/接收数据包接收数据包 在在JavaJava的的包中定义的两个类包中定义的两个类DatagramSock

45、etDatagramSocketDatagramPacketDatagramPacket,它们为应用程序中采用数据报通信方式进行它们为应用程序中采用数据报通信方式进行网络通信提供了支持。网络通信提供了支持。数据报(数据报(DatagramDatagram)是网络层数据单元在是网络层数据单元在介质上传输信息的一种逻辑分组格式,它介质上传输信息的一种逻辑分组格式,它是一种在网络中传播的、独立的、自身包是一种在网络中传播的、独立的、自身包含地址信息的消息,它的通信双方是不需含地址信息的消息,它的通信双方是不需要建立连接的。在使用数据报之前,首先要建立连接的。在使用数据报之前,首先需要将数据打包,然后

46、才能使用该数据报。需要将数据打包,然后才能使用该数据报。16.4.1 DatagramPacket类类 1将数据打包将数据打包 J包中的包中的DatagramPacket类用来创建类用来创建数据报。有两种类型的数据报:数据报。有两种类型的数据报:一种是一种是需要被传递的数据报需要被传递的数据报,该数据报中包含要,该数据报中包含要传递到的目的地址;传递到的目的地址;另一种数据报是另一种数据报是用来接收传递过来的数据报中的用来接收传递过来的数据报中的数据数据。它们可以分别用它们可以分别用DatagramPacket类的几个类的几个构造方法来创建构造方法来创建。(1)public DatagramP

47、acket(byte recvBuf,int ilength):该构造方法用来创建一个字节数组该构造方法用来创建一个字节数组recvBuf以接收以接收UDP包。包。ilength为从传递过来的数据包中读取的为从传递过来的数据包中读取的字节数,它不能超过数组的大小。字节数,它不能超过数组的大小。(2)public DatagramPacket(byte recvBuf,int offset,int ilength):该构造方法将接收到的数据从该构造方法将接收到的数据从recvBufoffset开始存放。如果数据报长度超出了开始存放。如果数据报长度超出了ilength,则触发,则触发Illegal

48、Argument Exception异常。异常。(3)public DatagramPacket(byte sendBuf,int ilength,InetAddress iaddr,int iport):该构造方该构造方法用来法用来创建要传输创建要传输的数据报。的数据报。sendBuf为要发送数据的存为要发送数据的存储区,储区,ilength应小于应小于sendBuf字节数组的大小。字节数组的大小。iaddr为数为数据报要传递到的目标地址,据报要传递到的目标地址,iport为接收端接收数据报的端为接收端接收数据报的端口号。口号。(4)public DatagramPacket(byte se

49、ndBuf,int offset,int ilength,InetAddress iaddr,int iport):与上述构造方法不同的是,该方法从与上述构造方法不同的是,该方法从sendBuf数组的数组的offset位置开始填充数据报位置开始填充数据报ilength字节,如果没有字节,如果没有offset,则从则从sendBuf数组的数组的0位置开始填充。位置开始填充。2、使用数据报、使用数据报 在创建数据报之后,就可以使用数据报了。接在创建数据报之后,就可以使用数据报了。接收数据报对象、获取数据报中的信息的主要方收数据报对象、获取数据报中的信息的主要方法如表法如表9-69-6所示所示.Da

50、tagramPacket类的主要方法类的主要方法 方法名方法名功能说明功能说明InetAddress getAddress()如果是发送数据报,该方法将获如果是发送数据报,该方法将获得数据报要发送的目的地址;如得数据报要发送的目的地址;如果是接收数据报,该方法将返回果是接收数据报,该方法将返回发送此数据报的源地址发送此数据报的源地址byte getData()获取数据报中的内容获取数据报中的内容int getLength()获取数据报中的数据的长度获取数据报中的数据的长度int getPort()获取数据报中目的地址的端口号获取数据报中目的地址的端口号void setAddress(InetA

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁