java的网络通信可以使用TCP、IP和UDP等协议。在真正进行java网络编程之前,对这些协议进行简单的介绍。
TCP(Transmission Control Protocol),指的是传输控制协议,它是网络传输层的协议,主要负责数据的分组和重组。TCP协议提供了一种可靠的数据传输服务,它是面向连接的,大多数的网络应用程序都是用TCP协议来实现传输层。使用TCP协议创建一个网络应用程序非常容易,它可以保证数据传输的时间、顺序和内容正确无误。但是使用TCP 需要大量的网络开销,所以如果希望实现更高效的传输,使用TCP协议就不合适了。TCP所提供服务的主要特点如下:
(1)面向连接的传输(可靠性的保证)
(2)端到端的通信
(3)高可靠性,确保传输数据的正确性,不出现丢失或乱序。
(4)全双工方式传输
(5)采用字节流方式,即以字节为单位传输字节序列(面向字节流)
(6)紧急数据传送功能
IP(Internet Protocol)(网络之间互联的协议)的缩写,中文简写成为“网协”,也就是为计算机网络互相连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。
IP地址是一个32为(IPv4)或128(IPv6)的无符号数字,使用4组数字表示固定的编号,数字之间用一个点号隔开,例如“172.168.1.52”就代表网络中一个计算机唯一的地址编号。
TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WAN)设计的。它是由ARPANET网的研究机构发展起来的。
UDP(User Datagram Protocol),指的是用户数据报协议。它和TCP协议一样,都是网络传输层上的协议,但是它与TCP有着本质的区别。使用UDP协议传输时,不保证数据一定能到达目的地,也不保证到达的顺序性。但是UDP协议占用的资源比较少,所以一般用在一些可靠性要求比较低的网络应用上,如网络视频会议、在线影视和聊天室等音频、视频数据传送。
端口(Port)可以被理解为计算机与外界通信交流的窗户。当一个信息到达时,根据其请求的端口号不同,就可以知道应该提供哪个服务了
常见服务端口表
服务 | 端口 |
HTTP | 80 |
FTP | 21 |
Telnet | 23 |
SMTP | 25 |
套接字(Socket)是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端面点,简单说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。某个程序将一段信息写入套接字中,该套接字就会将这段信息发送给另一个套接字,就像电话线的两端一样,这样另一端的程序就通过另一个套接字收到这段信息。所以使用套接字编程有时也称为Socket编程
在java的API中,java.net包是用来提供网络服务的,java.net包中含有各种专门用来开发网络应用程序的类,程序开发人员可以使用该包中的类很容易的建立基于TCP可靠连接的网络程序,以及基于UDP不可靠连接的网络程序。java.net包可以大致分为以下两个部分:
(1)低级API,用于处理网络地址(也就是网络标识符,如IP地址)、套接字(也就是基本双向数据通信机制)和接口(用于描述网络接口)。
(2)搞基API,用于处理URL(表示统一资源标识符)、URL(表示统一资源标识符)、URLConnection连接(表示到URL所指向资源的连接)等。
任何一台运行在Internet上的主机都有IP地址和当地的DNS能够解析的域名。而在java.net包中相应的提供了IP地址的封装类InetAddress。
InetAddress类用于描述和包装一个Internet IP地址,并提供了相关的常用方法,如解析IP地址的主机名称、获取本机IP地址的封闭、测试指定IP地址是否可达等。InetAddress实现java.io.Serializable接口,不允许继承。通过以下三种方法返回InetAddress实例。
getLocalhost():返回封装本地地址的实例
getAllByName(String host):返回封装Host地址的InetAddress实例数组
getByName(String host):返回一个封装Host地址的实例。其中,Host可以是域名或者是一个合法的IP地址。
boolean |
equals(Object obj) 将此对象与指定对象比较。 |
byte[] |
getAddress()
返回此 InetAddress 对象的原始 IP 地址。 |
static InetAddress[] |
getAllByName(String host)
在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。 |
static InetAddress |
getByAddress(byte[] addr)
在给定原始 IP 地址的情况下,返回 InetAddress 对象。 |
static InetAddress |
getByAddress(String host,
byte[] addr) 根据提供的主机名和 IP 地址创建 InetAddress。 |
static InetAddress |
getByName(String host)
在给定主机名的情况下确定主机的 IP 地址。 |
String |
getCanonicalHostName()
获取此 IP 地址的完全限定域名。 |
String |
getHostAddress()
返回 IP 地址字符串(以文本表现形式)。 |
String |
getHostName()
获取此 IP 地址的主机名。 |
static InetAddress |
getLocalHost()
返回本地主机。 |
int |
hashCode()
返回此 IP 地址的哈希码。 |
boolean |
isAnyLocalAddress()
检查 InetAddress 是否是通配符地址的实用例行程序。 |
boolean |
isLinkLocalAddress()
检查 InetAddress 是否是链接本地地址的实用例行程序。 |
boolean |
isLoopbackAddress()
检查 InetAddress 是否是回送地址的实用例行程序。 |
boolean |
isMCGlobal()
检查多播地址是否具有全局域的实用例行程序。 |
boolean |
isMCLinkLocal()
检查多播地址是否具有链接范围的实用例行程序。 |
boolean |
isMCNodeLocal()
检查多播地址是否具有节点范围的实用例行程序。 |
boolean |
isMCOrgLocal()
检查多播地址是否具有组织范围的实用例行程序。 |
boolean |
isMCSiteLocal()
检查多播地址是否具有站点范围的实用例行程序。 |
boolean |
isMulticastAddress()
检查 InetAddress 是否是 IP 多播地址的实用例行程序。 |
boolean |
isReachable(int timeout)
测试是否可以达到该地址。 |
boolean |
isReachable(NetworkInterface netif, int ttl,
int timeout) 测试是否可以达到该地址。 |
boolean |
isSiteLocalAddress()
检查 InetAddress 是否是站点本地地址的实用例行程序。 |
String |
toString()
将此 IP 地址转换为 String 。 |
1 import java.io.IOException; 2 import java.net.InetAddress; 3 import java.net.UnknownHostException; 4 5 public class javaTest2 extends Thread { 6 7 public static void main(String[] args) throws IOException { 8 InetAddress ia=InetAddress.getLocalHost(); 9 System.out.println(ia); 10 InetAddress ia1=InetAddress.getByName("www.baidu.com"); 11 System.out.println(ia1); 12 System.out.println(ia.isReachable(1000)); 13 } 14 }
运行结果: 1 qinghan/10.160.10.202 2 www.baidu.com/220.181.111.188 3 false
分析结果:当使用isReachable()函数时出现false的原因,查资料是因为防火墙阻止了外面进来的ICMP数据包。
注:查看api文档,发现InetAddress类没有构造函数~
1、URL类
URL由两部分组成:协议标识符和资源名称。其中“http”为使用的协议,它指的是超文本传输协议(HTTP)。其他常用的协议还包括文件传输协议(FTP)、Gopher、File和News。
URL类提供了多个方法,可以获取URL对象协议、主机名、端口号、路径、查询字符串、文件名及资源引用。
构造函数表
URL(String spec) 根据 String 表示形式创建 URL 对象。 |
URL(String protocol, String host,
int port, String file) 根据指定 protocol 、host 、port 号和 file
创建 URL 对象。 |
URL(String protocol, String host,
int port, String file, URLStreamHandler handler)
根据指定的 protocol 、host 、port
号、file 和 handler 创建 URL 对象。 |
URL(String protocol, String host, String file)
根据指定的 protocol 名称、host 名称和
file 名称创建 URL。 |
URL(URL context, String spec)
通过在指定的上下文中对给定的 spec 进行解析创建 URL。 |
URL(URL context, String spec, URLStreamHandler handler)
通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL。 |
原文:http://www.cnblogs.com/xiaotiaosi/p/6388684.html