第二周实验补充材料基于Socket通信.pdf

上传人:赵** 文档编号:46682894 上传时间:2022-09-27 格式:PDF 页数:32 大小:597.34KB
返回 下载 相关 举报
第二周实验补充材料基于Socket通信.pdf_第1页
第1页 / 共32页
第二周实验补充材料基于Socket通信.pdf_第2页
第2页 / 共32页
点击查看更多>>
资源描述

《第二周实验补充材料基于Socket通信.pdf》由会员分享,可在线阅读,更多相关《第二周实验补充材料基于Socket通信.pdf(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第 2 章 基于 Socket 通信 网络通信是一种进程间通信(IPC:Inter-Process Communication),要求位于不同网络节点不同进程的通信双方必须遵循统一的通信协议方可实现。基于套接字(Socket)通信是应用在不同节点上的进程间通信的典型方法。本章介绍了基于Socket通信的基本方式:数据包Socket和流式Socket,详细说明其基本原理与实现方法。针对因特网典型应用与应用层协议开发,本章介绍简单的Daytime协议应用开发,以及文件传输协议(FTP:File Transfer Protocol)、超文本传输协议(HTTP:Hypertext Transfer P

2、rotocol)基本原理与开发过程。2.1 基本原理 2.1.1 Socket API 基本概念 Socket API是TCP/IP网络的API。Socket API最早作为伯克利(Berkeley)UNIX操作系统的程序库,出现于20世纪80年代早期,用于提供IPC通信。目前,所有主流操作系统都支持Socket API,在BSD、Linux等基于UNIX的系统中,Socket API都是操作系统内核的一部分。在MS-DOS、Windows等个人计算机操作系统也是以程序库的形式提供Socket API(其中在Windows系统中,Socket API被称作Winsock)。JAVA语言在设计之

3、初也考虑到网络编程,也将Socket API作为语言核心类的一部分。以上Socket API都有相同的消息模型和类似的语法。Socket API 的概念模型如 图 2-1 所示。Telnet FTPSMTPDNSSNMPTCPUDPARPRARP EthernetToken Ring其它协议HTTPTFTPIPSocket API运行时支持客户端进程Socket API运行时支持服务器进程 图 2-1 Socket API 的概念模型 Socket是物理网络地址和逻辑端口号的一个集合,通过这个集合可以向另外一个位置的与它具有相同定义的Socket进行数据传输。由于Socket是由机器地址和端口

4、号来识别的,那么在一个特定的计算机网络上,每一个Socket都是以此方式被唯一识别的。这就使得应用程序可以唯一被定位。套接字类型有二种:一个是流式Socket,它提供进程之间的逻辑连接,并且支持可靠的数据交换;另一个就是数据包Socket,它是无连接的并且不可靠。【提示】Socket 是从电话通信中借用的一个术语,socket 的英文原义是“孔”或“插座”。Socket 非常类似于电话插座,电话的通话双方相当于相互通信的 2 个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于 socket 号。任何用户在通话之前,首先要占有一部电话机,相当于申请

5、一个 socket;同时要知道对方的号码,相当于对方有一个固定的 socket。2.1.2 JAVA 对网络通信的支持 JDK(Java Developers Kit)提供的预定义类库支持Java程序直接发送与接收TCP数据段或UDP数据报,并帮助程序员以更直接的方式处理建立在TCP之上的应用层协议HTTP、FTP、FILE、HTTPS等。程序员使用这些预定义的类可轻松实现基于TCP和UDP的编程,或更直接地通过HTTP、FTP、FILE等协议访问以URL定位的网上资源。以面向连接的TCP为基础,程序员还可实现常见的Telnet、FTP、SMTP等应用层协议的客户程序或服务程序。JDK预定义的

6、类均存放在程序包中,使用其中的哪些类取决于所需处理的通信协议。例如,基于TCP的应用程序可使用Socket、ServerSocket等类;基于UDP的应用程序则使用DatagramPacket、DatagramSocket、MulticastSocket等类;基于HTTP和FTP等协议直接访问URL资源的应用程序可使用URL、URLConnection等类;更注重网络通信安全的HTTPS应用程序则使用SSLSocketFactory、SSLSocket、SSLSession等类。【提示】JDK 目前提供的预定义类库并不支持网络层 IP 协议,因而程序员无法使用预定义的类直接在 Java 程序中

7、发送或接收原始 IP 数据报。倘若应用程序需处理 TCP 和 UDP 之外的传输层协议,或者是直接处理网络层或链路层的任何协议(例如 IP、ICMP、IGMP、ARP/RARP 等协议),可借助于 Java 语言的地代码(native code)机制。2.1.3 TCP、UDP 与端口 尽管位于传输层的协议TCP和UDP均使用相同的网络层协议IP,但这两种传输层协议却为应用层提供了完全不同的服务:TCP提供一种面向连接的、可靠的数据流服务,而UDP则提供一种面向独立数据报的高效传输服务。(1)TCP 传输控制协议 传输控制协议(TCP:Transfer Control Protocol)是一种

8、面向连接的传输层协议,可为两台不同主机上的应用程序提供可靠的数据流连接。所谓“面向连接”,意味着两个使用TCP通信的应用程序在交换数据之前,必须先建立一个TCP连接,待通信结束后须关闭该连接。这一过程与电话通信相似:先拨号振铃,等待对方摘机应答后再表明身份,通话完毕后挂机。TCP执行的任务包括把应用层传来的数据分解为合适的数据段交给网络层,确认接收到的数据分组,设置发送最后确认分组的超时时间等,为应用层屏蔽了实现端到端可靠通信的细节。TCP可保证数据从连接的一端送到另一端时仍能保持原来发送时的次序,否则将一个传输错误。TCP为需要可靠通信的应用程序提供了一种点对点信道,在因特网上常见的FTP、

9、Telnet、SMTP等大多数应用层协议都建立在TCP的基础上。(2)UDP 用户数据报协议 与TCP协议不同的是,用户数据报协议(UDP:User Datagram Protocol)不是基于连接的,而是为应用层提供一种非常简单、高效的传输服务。UDP从一个应用程序向另一应用程序发送独立的数据报,但并不保证这些数据报一定能到达另一方,并且这些数据报的传输次序无保障,后发送的数据报可能先到达目的地。使用UDP协议时,任何必需的可靠性都须由应用层自己提供。UDP适用于对通信可靠性要求低且对通信性能要求高的应用,诸如域名系统DNS(Domain Name System)、路由信息协议RIP(Rou

10、ting Information Protocol)、简单网络管理协议SNMP(Simple Network Management Protocol)、普通文件传送协议TFTP(Trivial File Transfer Protocol)等应用层协议都建立在UDP的基础上。虽然UDP不如TCP那样常用,但UDP因其固有的特点而在某些应用场合可更好地发挥特长。例如在一个TCP连接中仅允许两方参与通信,故广播和多播方式不能用于TCP协议,但UDP却能有效地支持广播和多播通信;又如,对一个播发时间的服务程序而言,重发丢失的数据已毫无意义,因为知道数据丢失后原来的时间已经过去;使用ping方式测试两

11、个应用序的通信效果时,反而需要计算数据的丢失率;在一些协同工作的网络应用程序之间,还可利用UDP实现心跳消息(heartbeat message)彼此通知各自的存在。注意在适合UDP协议的各种应用中,要么是因为TCP协议提供的可靠性服务是多余的,要么由应用程序自己实现了所需的可靠性。(3)端口 由于现代计算机大多运行多任务操作系统,故一台主机上可能同时运行多个应用程序进程,并且一个进程还可能使用多个不同的连接,因而仅用主机名或IP地址无法惟一地标识数据包的源或目标。端口为标识参与通信的主机、进程和连接提供了一种统一的、惟一的方法,图 2-2 应用层协议及其对应端口【思考】请与并行口或串行口等具

12、体物理实体相对比,理解端口是一个物理概念,还仅仅是一个程序设计层面的逻辑概念?因特网上数据的传输目标由主机和端口号组成,例如UDP这类基于数据报通信的每一数据报中均含有端口号信息。主机可由32位的IP地址标识(假设采用IPv4),端口则采用16位数字标识,故端口号的取值范围为0-65535。编号为0-1023的端口保留给系统服务使用,包括HTTP、FTP、Telnet、SMTP等常见服务。应用程序则使用剩余的其他端口,例如Java远程方法调用(RMI)使用端口1099,Microsoft SQL Server默认使用端口1433,BEA WebLogic Server默认使用端口7001和70

13、02等。(如 图 2-2 所示。)【提示】对于基于连接的通信(例如 TCP 协议)而言,端口为不同应用程序提供了虚拟的专用连接,每一个socket 都绑定到特定的端口号。2.2 数据报 Socket 2.2.1 基本编程原理 UDP采用数据报进行通信,数据报是否可到达目标、以什么次序到达目标、到达目标时内容是否依然正确等均是未经校验的。因而UDP是一种不可靠的点对点通信,适合对通信性能要求高、但通信可靠性要求低的应用,并可支持广播和多播通信方式。与基于TCP的通信类似,基于UDP的单播通信是将数据报从一个发送方传输给单个接收方。程序包为实现UDP单播通信主要提供了两个类:类DatagramPa

14、cket代表一个被传送的UDP数据包,该类封装了被传送数据报的内容、源主机与端口号、目标主机与端口号等信息;类DatagramSocket代表一个用于传送UDP数据包的UDPsocket。【提示】由于 UDP 并不是一种基于连接的协议,因而对 UDP 而言没有类似 TCP 的 I/O 流机制。(1)类 DatagramPacket 从类DatagramPacket的构造方法可看出,创建一个DatagramPacket实例时必须提供被封装的数据报详细信息:DatagramPacket(byte buf,int offset,int length)DatagramPacket(byte buf,i

15、nt length)DatagramPacket(byte buf,int offset,int length,InetAddress address,int port)DatagramPacket(byte buf,int offset,int length,SocketAddress address)throws SocketException DatagramPacket(byte buf,int length,InetAddress address,int port)DatagramPacket(byte buf,int length,SocketAddress address)thr

16、ows SocketException 其中,参数buff指定一个字节数组作为缓冲区,用于存放所接收的UDP数据报;参数offset指定缓冲区中的偏移量;参数length表示以字节计算的数据报长度,该参数不可大于缓冲区的大小;参数address和port指定数据报传送目标的地址与端口号,可调用该实例的setAddress()和setPort()方法重新设定目标地址和端口号。类DatagramPacket既可描述客户程序发送的一个UDP数据报,也可描述服务程序接收的一个UDP数据报。该类提供了多个方法用于设置或访问UDP数据报的状态,例如接收或发送该数据报的主机(IP地址与端口号)、存放在内部缓

17、冲区中的数据报内容以及缓冲区的偏移量与数据报长度等。这些设置和访问方法包括:/设置接收该数据报的主机地址 public synchronized void setAddress(InetAddress iaddr)/返回发送或接收数据报的主机地址 public synchronized InetAddress getAddress()/设置接收该数据报的主机端口号 public synchronized void setPort(int iport)/返回发送或接收数据报的主机端口号 public synchronized int getPort()/设置接收该数据报的远程主机地址(Socke

18、tAddress 实例中已含IP 地址和端口号)public synchronized void setSocketAddress(SocketAddress address)/返回接收或发送该数据报的远程主机地址 public synchronized SocketAddress getSocketAddress()/设置数据报中的数据缓冲区(偏移量为0 且长度为缓冲区的长度)public synchronized void setData(byte buf)/设置缓冲区中的数据、偏移量与长度 public synchronized void setData(byte buf,int off

19、set,int length)/返回缓冲区中从偏移量offset 开始、长度为length 的数据 public synchronized byte getData()/返回缓冲区的偏移量设置 public synchronized int getOffset()/设置数据报的长度 public synchronized void setLength(int length)/返回发送或接收的数据报的长度 public synchronized int getLength()(2)类 DatagramSocket 基于TCP 的通信是一种面向连接的socket,而UDP socket则面向一个个

20、独立的数据报。一个UDP socket既可用于发送UDP数据报,也可用于接收UDP数据报。类DatagramSocket封装了一个UDP socket绑定的本地主机地址与端口号,及其连接的远程主机地址与端口号,并且支持通过该UDP socket发送和接收UDP数据报。在创建一个DatagramSocket实例时,可通过不同形式的构造方法指定该UDP socket绑定的主机地址与端口号:DatagramSocket()throws SocketException DatagramSocket(SocketAddress bindAddr)throws SocketException Datagr

21、amSocket(int port)throws SocketException DatagramSocket(int port,InetAddress addr)throws SocketException 其中,参数bindAddr指定新实例绑定的本地socket地址,参数address和port指定新实例绑定的本地主机地址和端口号。类DatagramSocket负责管理UDP socket的绑定和连接状态,执行发送和接收UDP数据报的操作。当一个UDP socket连接到一个由地址和端口号指定的远程主机时,该socket只能向该地址发送或从该地址接收UDP数据报。类DatagramSoc

22、ket提供的主要方法如下:/将当前UDP socket 绑定到一个本地主机地址与端口号 public synchronized void bind(SocketAddress addr)throws SocketException/返回当前绑定的本地主机地址和端口号 public SocketAddress getLocalSocketAddress()/返回当前绑定的本地主机地址 public InetAddress getLocalAddress()/返回当前绑定的本地主机端口号 public int getLocalPort()/返回当前的绑定状态 public boolean isBo

23、und()/将当前UDP socket 连接到一个远程主机地址与端口号 public void connect(InetAddress address,int port)public void connect(SocketAddress addr)throws SocketException/断开当前UDP socket 与远程主机的连接 public void disconnect()/返回当前连接的远程主机地址和端口号 public SocketAddress getRemoteSocketAddress()/返回当前连接的远程主机地址 public InetAddress getInet

24、Address()/返回当前连接的远程主机端口号 public int getPort()/返回当前的连接状态 public boolean isConnected()/利用当前UDP socket 发送一个UDP 数据报 public void send(DatagramPacket p)throws IOException/利用当前UDP socket 接收一个UDP 数据报 public synchronized void receive(DatagramPacket p)throws IOException/关闭当前UDP socket public void close()/判断当前

25、UDP socket 是否已关闭 public boolean isClosed()【提示】除上述主要方法外,类 DatagramSocket 还提供了 UDP socket 选项的设置与访问方法。例如,setSoTimeout()和 getSoTimeout()可用于设置或访问 UDP socket 的超时选项 SO_TIMEOUT,类似地还可设置或访问 UDP socket 的 SO_SNDBUF、SO_RCVBUF、SO_REUSEADDR、SO_BROADCAST 等选项。2.2.2 面向无连接数据包 UDP 图 2-3 显示UDP与TCP协议之间的不同在于UDP不是一种基于稳定连接的

26、通讯协议,UDP协议使用数据报式套接字,UDP在数据传输之前不需要先建立连接,UDP没有组装和重传请求的功能,并不保证接收方能够接收到该数据包,也不保证接收方所接收到的数据和发送方所发送的数据在内容和顺序上是完全一致的。其主要工作是将应用程序传输过来的数据分块交给网络层,确认接受到分组信息。图 2-3 无连接数据包 Socket 在J包中,DatagramPacket类用于实现数据报的接收和发送、读取报文信息等。在图 2-4 建立的模型中,使用UDP数据报协议,以收发数据报作为通信方式。每个数据报文有独立的源地址和目的地址,服务器和客户端不建立连接,通信的内容数据报短信息的形式实现,但传输时不

27、能保证对方一定能收到,也不能保证收到的报文次序。图 2-4 数据报 Socket 通信过程 以下例程 UDPConnectless 实现无连接数据包传递数据。实现由一方发送消息给另一方,另一方通过接收到消息后,再返回消息给发送方。(如 图 2-5 和 表 2-1 所示)DatagramSocket+DatagramSocketHelp()+sendMessage()+receiveMessage()DatagramSocketHelpDatagramPacketUDPConnectionReceiverSenderUDPConnectionSenderReceiver 图 2-5 无连接数据包

28、程序 UDPConnectless 类图 表 2-1 无连接数据包例程 UDPConnectless UDPConnectionSenderReceiver.java 发送接收类 程序 2-1 UDPConnectionReceiverSender.java 接收返回类 程序 2-2 DatagramSocketHelp.java 数据报帮助类 程序 2-3 程序 2-1 发送接收类 UDPConnectionSenderReceiver.java/发送接收类 import .*;public class UDPConnectionSenderReceiver public static vo

29、id main(String args)if(args.length!=4)System.out.println(命令行参数:接收方IP地址,接收方端口,发送方端口,发送字符串);else try InetAddress receiverHost=InetAddress.getByName(args0);int receiverPort=Integer.parseInt(args1);int myPort=Integer.parseInt(args2);String message=args3;/产生数据报用于发送和接收数据 DatagramSocketHelp mySocket=new Da

30、tagramSocketHelp(myPort);/发送数据报 mySocket.sendMessage(receiverHost,receiverPort,message);/等待返回数据 System.out.println(mySocket.receiveMessage();mySocket.close();catch(Exception ex)ex.printStackTrace();程序 2-1 通过实例化 DatagramSocketHelp类,由 DatagramSocketHelp对象产生数据报用于发 送 和 接 收 数 据。由 DatagramSocketHelp 对 象 的

31、 sendMessage()方 法 发 送 数 据 报,由.receiveMessage()接收数据,接收数据后则销毁 DatagramSocketHelp对象。程序 2-2 接收返回类 UDPConnectionReceiverSender.java/接收返回类 import .*;public class UDPConnectionReceiverSender public static void main(String args)if(args.length!=4)System.out.println(命令行参数:发送方IP地址,发送方端口,接收方端口,发送字符串);else try I

32、netAddress receiverHost=InetAddress.getByName(args0);int receiverPort=Integer.parseInt(args1);int myPort=Integer.parseInt(args2);String message=args3;/产生数据报用于接收和返回数据 DatagramSocketHelp mySocket=new DatagramSocketHelp(myPort);/接收数据报 System.out.println(mySocket.receiveMessage();/返回数据报 mySocket.sendMes

33、sage(receiverHost,receiverPort,message);mySocket.close();catch(Exception ex)ex.printStackTrace();程序 2-2通过实例化 DatagramSocketHelp类,由 DatagramSocketHelp对象产生数据报用于接收和返回数据。由 DatagramSocketHelp 对象的 receiveMessage()先接收数据,接收数据后再通过 sendMessage()方法发送数据报,最后销毁 DatagramSocketHelp对象。程序 2-3 数据报帮助类 DatagramSocketHel

34、p.java/数据报帮助类 import .*;import java.io.*;public class DatagramSocketHelp extends DatagramSocket static final int MAX_LEN=100;DatagramSocketHelp(int portNo)throws SocketException super(portNo);/发送消息方法 public void sendMessage(InetAddress receiverHost,int receiverPort,String message)throws IOException

35、byte sendBuffer=message.getBytes();DatagramPacket datagram=new DatagramPacket(sendBuffer,sendBuffer.length,receiverHost,receiverPort);this.send(datagram);/接收消息方法 public String receiveMessage()throws IOException byte receiveBuffer=new byteMAX_LEN;DatagramPacket datagram=new DatagramPacket(receiveBuff

36、er,MAX_LEN);this.receive(datagram);String message=new String(receiveBuffer);return message;数据报帮助类 DatagramSocketHelp 继承 DatagramSocket 类,DatagramSocketHelp 类中有二个主要的方法,即发送消息方法 sendMessage()与接收消息方法 receiveMessage(),通过DatagramPacket类的实例化对象,实现数据报的接收和发送、读取报文信息等。2.2.3 面向连接数据包 UDP 一般来说,很少用数据报 Socket 实现面向连接

37、通信,因为此 API 提供的连接非常简单,通常难以满足应用要求。但我们可以从这个例子中可以看出“分层”思想的体现。图 2-6 面向连接数据包 Socket 例程 UDPConnection 实现面向连接数据包传递数据。类 DatagramSocketHelp 继承了DatagramSocket,DatagramSocket 中有用于创建和终止连接的两个方法。Socket 连接通过指定远程 Socket 地址建立。一旦连接建立后,Socket 被用来与远程 Socket 交换数据报文。在 Send操作中,如果数据报与另一端地址不匹配,将引发异常。如果发送到 Socket 的数据来源于某个发送源,

38、而不是源于与之连接的远程 Socket,此数据就被忽略。因而,连接一旦与数据报绑定后,此 Socket将不能与任何其他 Socket进行通信,直到此连接终止。(如 表 2-2所示)表 2-2 面向连接数据包例程 UDPConnection UDPConnectionSender.java 面向连接数据包发送类 程序 2-4 UDPConnectionReceiver.java 面向连接数据包接收类 程序 2-5 DatagramSocketHelp.java 数据报帮助类 程序 2-3 程序 2-4 面向连接数据包发送类 UDPConnectionSender.java/面向连接数据包发送类

39、import .*;public class UDPConnectionSender public static void main(String args)if(args.length!=4)System.out.println(命令行参数:接收方IP地址,接收方端口,发送方端口,发送字符串);else try InetAddress receiverHost=InetAddress.getByName(args0);int receiverPort=Integer.parseInt(args1);int myPort=Integer.parseInt(args2);String messa

40、ge=args3;/创建面向连接的数据报 DatagramSocketHelp mySocket=new DatagramSocketHelp(myPort);/建立连接 mySocket.connect(receiverHost,receiverPort);for(int i=0;i 10;i+)mySocket.sendMessage(receiverHost,receiverPort,message);/接收从接收方的返回数据 System.out.println(mySocket.receiveMessage();/断开连接,关闭Socket mySocket.disconnect()

41、;mySocket.close();catch(Exception ex)System.out.println(ex);程序 2-4 通过 DatagramSocketHelp 类的 connect()方法创建面向连接的数据报,connect()方法的参数包括接收方的主机地址与接收方端口,建立连接后,再通过 sendMessage()方法向接收方发送数据,利用 receiveMessage()方法接收数据。程序 2-5 面向连接数据包接收类 UDPConnectionReceiver.java/面向连接数据包接收类 import .*;public class UDPConnectionRec

42、eiver public static void main(String args)if(args.length!=4)System.out.println(命令行参数:发送方IP地址,发送方端口,接收方端口,发送字符串);else try InetAddress senderHost=InetAddress.getByName(args0);int senderPort=Integer.parseInt(args1);int myPort=Integer.parseInt(args2);String message=args3;/创建面向连接的数据报 DatagramSocketHelp m

43、ySocket=new DatagramSocketHelp(myPort);/建立连接,接收数据 mySocket.connect(senderHost,senderPort);for(int i=0;i 100;i+)System.out.println(mySocket.receiveMessage();/向对方发送数据 mySocket.sendMessage(senderHost,senderPort,message);mySocket.close();catch(Exception ex)System.out.println(An exception has occured:+ex

44、);程序 2-5 与 程序 2-4 类似,通过 DatagramSocketHelp类的 connect()方法创建面向连接的数据报,connect()方法的参数包括发送方的主机地址与接收方端口,建立连接后,利用receiveMessage()方法接收数据,再通过 sendMessage()方法向接收方发送数据。【思考】请从第一章介绍的隐式地与显式地角度出发,理解例程 UDPConnection 基于数据包 socket 实现面向连接通信过程。2.3 流式 Socket 2.3.1 基本编程原理 流式 Socket 所完成的通信是一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一

45、条专用的虚拟连接通道,然后它们通过这条通道传送数据信息进行通信,当通信结束时再将原先所建立的连接拆除(如 图 2-7 所示)。图 2-7 流式 Socket 连接控制方式 在这个过程中,Server 端首先在某端口提供一个监听 Client 请求的监听服务并处于监听状态,当 Client 端向该 Server 的这个端口提出服务请求时,Server 端和 Client 端就建立了一个连接和一条传输数据的通道,当通信结束时,这个连接通道将被同时拆除。在基于 TCP 的通信中,应用程序需直接使用 IP 地址或域名指定运行在因特网上的某一台主机。 程序包中定义的 InetAddress 类是一个 I

46、P 地址或域名的抽象。创建 InetAddress类的一个实例时既可使用字符串表示的域名,也可使用字节数组表示的 IP 地址。该类的主要内容如下所示:/工厂方法(类方法)/利用主机名创建一个实例 static InetAddress getByName(String host)throws UnknownHostException/利用IP 地址创建一个实例 static InetAddress getByAddress(byte addr)throws UnknownHostException/利用主机名和IP 地址创建一个实例 static InetAddress getByAddress

47、(String host,byte addr)throws UnknownHostException/根据主机名返回该主机所有IP 地址的实例数组(例如多接口主机可绑定多个IP 地址)static InetAddress getAllByName(String host)throws UnknownHostException/返回本地主机的一个实例 static InetAddress getLocalHost()throws UnknownHostException /属性访问方法(实例方法)/取出当前实例的主机名(参数check 指定是否执行安全检查,默认值为true)String get

48、HostName()String getHostName(boolean check)/取出当前实例的完整的域名 String getCanonicalHostName()/取出当前实例的IP 地址 byte getAddress()/取出当前实例的IP 地址字符串 String getHostAddress()/检测当前实例的IP 地址所属的范围(实例方法)/判断是否一个多播地址(在IPv4 中即224.0.0.0 至239.255.255.255 范围的所谓D 类IP 地址)boolean isMulticastAddress()/判断是否一个通配地址(在IPv4 中即0.0.0.0)bo

49、olean isAnyLocalAddress()/判断是否一个环回地址(在IPv4 中即localhost 的IP 地址127.*.*.*)boolean isLoopbackAddress()/判断单播地址是否本地链路范围(在IPv4 中即169.254/16 为前缀的地址)boolean isLinkLocalAddress()/判断单播地址是否本地站点范围(在IPv4 中即10/8、172.16/12 和192.168/16 为前缀的地址)boolean isSiteLocalAddress()/判断多播地址是否全局范围(在IPv4 中即224.0.1.0 至238.255.255.2

50、55,MC 指Multicast)boolean isMCGlobal()/判断多播地址是否本地结点范围(仅IPv6 使用)boolean isMCNodeLocal()/判断多播地址是否本地链路范围(在IPv4 中即224.0.0/24 为前缀的地址)boolean isMCLinkLocal()/判断多播地址是否本地站点范围(在IPv4 中即239.255/16 为前缀的地址)boolean isMCSiteLocal()/判断多播地址是否本地机构范围(在IPv4 中即239.192/14 为前缀的地址)boolean isMCOrgLocal()注意在该类的设计中采用了 GoF 的工厂方

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

当前位置:首页 > 教育专区 > 高考资料

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

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