java-doc-net

InetAddress

InetAddress类用于封装数字IP地址及对应的域名。使用IP主机的名称与这个类进行交互,与使用IP地址相比,使用IP主机名称更方法、也更容易理解。InetAddress类在内部隐藏了数字。InetAddress类可以同时处理IPv4和IPv6地址

  • InetAddress声明的方法
方法 描述
static InetAddress getLocalHost() 返回本地主叫的InetAddress对象
static InetAddress getByName(String hostName) 根据传递过来的主机名返回InetAddress对象,如果无法解析主机名,就会抛出UnknowHostExcpetion
static InetAddress[] getAllByName(String hostName) 根据传递过来的主机名返回一组InetAddress对象数组,该数组表示解析特定名称后得到的所有地址。如果不能解析出至少一个地址,该方法会抛出UnknowHostException异常
static InetAddress getByAddress(byte[] addr) 根据ip地址获取InetAddress对象
static InetAddress getByAddress(String host, byte[] addr) 根据ip地址获取InetAddress对象
boolean equals(Object other) 如果该对象与other对象具有相同的Inernet地址,就返回true
byte[] getAddress() 以网络字节序返回一个字节数组,表示该地址的IP地址
String getHostAddress() 返回一个字符串,表示与InetAddress对象关联的主机地址
String getHostName() 返回一个字符串,表示与InetAddress对象关联的主机名
boolean isMulticastAddress() 如果该地址是一个多播地址,就返回true;否则返回false
String toString() 返回InetAddress的字符串描述
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.net.InetAddress;
import java.net.UnknownHostException;

public class LearnInetAddress1
{
public static void main(String args[]) throws UnknownHostException
{
InetAddress address = InetAddress.getLocalHost();
System.out.println(address);

address = InetAddress.getByName("www.baidu.com");
System.out.println(address);

InetAddress arrAddress[] = InetAddress.getAllByName("www.163.com");
for(int i = 0; i < arrAddress.length; ++i) {
System.out.println(arrAddress[i]);
}
}
}

Inet4Address

Inet4Address是InetAddress的子类,表示传统风格的IPv4地址。

Inet6Address

Inet6Address是InetAddress的子类,表示新风格的IPv6地址

TCP/IP套接字

TCP/IP套接字用于Internet主机之间实现可靠的、双向的、持续的、点对点的、基于流的连接。在Java中,有两种类型的IPC套接字。一种用于服务器,一种用于客户端。ServerSocket类被设计成“监听者”,等待客户端进行连接,在这之前什么也不做。因此ServerSocket用于服务器。Socket类用于客户端,它被设计成用于连接到服务器套接字并发起协议交互。

Socket

创建Socket对象会隐式地建立客户端和服务器之间的连接,没有显示提供建立连接细节的方法和构造函数。

  • Socket构造函数
方法 描述
Socket(String hostName, int port) 创建连接到命名主机和端口的套接字
Socket(InetAddress ipAddress, int port) 使用已存在的InetAddress对象和端口创建套接字
  • Socket声明的方法
方法 描述
InetAddress getInetAddress() 返回与调用Socket对象关联的InetAddress对象。如果套接字没有连接,就返回null
int getPort() 返回调用Socket对象连接到远程端口。如果套接字没有连接,就返回0
int getLocalPort() 返回绑定到调用Socket对象的本地端口。如果套接字没有连接,就返回-1
InputStream getInputStream() 返回与调用套接字关联的InputStream对象,如果套接字丢失连接变得无效,会抛出IOException异常
OutputStream getOutputStream() 返回与调用套接字关联的OutputStream对象,如果套接字丢失连接变得无效,会抛出IOException异常
void connect(SocketAddress endpoint) 连接到指定的网络地址
void connect(SocketAddress endpoint, int timeout) 超时的方式对指定地址进行连接
boolean isConnected() 如果套接字连接到服务器,返回true;否则返回false
boolean isBound() 如果套接字被帮到某个地址,该方法返回true;否则返回false
boolean isClosed() 如果套接字已经关闭,该方法返回true;否则返回false
void close() 关闭套接字,同时关闭与之关联的IO流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class LearnSocket1
{
public static void main(String args[]) throws Exception
{
int c ;
try(Socket s = new Socket("whois.internic.net", 43)){
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();

String str = "www.baidu.com\n";
byte buf[] = str.getBytes();
out.write(buf);

while((c = in.read()) != -1) {
System.out.print((char)c);
}
}
}
}

ServerSocket

ServerSocket类用于创建服务器,在发布的端口上监听与之连接的本地或远程客户端程序。

  • 构造函数
方法 描述
ServerSocket(int port) 在指定的端口上创建服务器套接字,队列长度为50
ServerSocket(int port, int maxQueue) 在指定的端口上创建服务器套接字,最大队列长度为maxQueue
ServerSocket(int port, int maxQueue, InetAddress localAddress) 在指定的端口上创建服务器套接字,最大队列长度为maxQueue。在多宿主主机上,localAddress指定了套接字绑定的IP地址
  • ServerSocket声明的方法
方法 描述
Socket accept() 阻塞方式等待客户端连接,返回客户端连接的Socket对象

UDP

数据报是在两台机器之间传递的信息包。一旦将数据报释放给期望的目标,就既不能保证到达,也不能保证有人会在目的捕获到。同样,当接收到数据报时,既不能保证数据在传输过程中没有被破坏,也不能保证发送者仍然在等待接收响应。

Java通过两个类在UDP协议之上实现数据报:DatagramPacket对象是数据封装器,而DatagramSocket对象是用于发送和接收DatagramPacket对象的机制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;


public class LearnUDP1
{
public static int serverPort = 998;
public static int clientPort = 999;
public static int buffer_size = 1024;
public static DatagramSocket ds;
public static byte buffer[] = new byte[buffer_size];

public static void TheServer() throws Exception
{
int pos = 0;
while(true) {
int c = System.in.read();
switch(c) {
case -1:
System.out.println("Server Quits");
ds.close();
break;
case '\r':
break;
case '\n':
ds.send(new DatagramPacket(buffer, pos, InetAddress.getLocalHost(), clientPort));
pos = 0;
break;
default:
buffer[pos++] = (byte)c;
}
}
}

public static void TheClient() throws Exception
{
while(true) {
DatagramPacket p = new DatagramPacket(buffer, buffer.length);
ds.receive(p);
System.out.println(new String(p.getData(), 0, p.getLength()));
}
}

public static void main(String args[]) throws Exception
{
if(args.length == 1) {
ds = new DatagramSocket(serverPort);
TheServer();
} else {
ds = new DatagramSocket(clientPort);
TheClient();
}
}
}

DatagramSocket

  • 构造函数
方法 描述
DatagramSocket() 创建绑定到本地计算机上任意未使用端口的DatagramSocket对象
DatagramSocket(int port) 创建绑定到port指定端口的DatagramSocket对象
DatagramSocket(int port, InetAddress ipAddress) 创建绑定到指定端口和InetAddress对象的DatagramSocket对象
DatagramSocket(SocketAddress address) 创建绑定到指定SocketAddress对象DatagramSocket对象
  • DatagramSocket常用方法
方法 描述
void send(DatagramPacket packet) 向packet指定的端口发送数据报
void receive(DatagramPacket packet) 等待从packet指定的端口结束数据报并返回结果
void close() 关闭套接字
InetAddress getInetAddress() 如果套接字已经连接,就返回地址;否则返回null
int getLocalPort() 返回本地端口号
int getPort() 返回套接字连接的端口号。如果套接字没有连接到端口,就返回-1
boolean isBound() 如果套接字被绑定到某个地址,就返回true;否则返回false
boolean isConnected() 如果套接字已经连接到某台服务器,就返回true;否则返回false
void setSoTimeout(int millis) 将超时周期设置成millis传递的毫秒数

DatagramPacket

  • 构造函数
方法 描述
DatagramPacket(byte data[], int size) 指定接收数据的缓冲区和包的大小,用于通过DatagramSocket对象接收数据
DatagramPacket(byte data[], int offset, int size) 允许指定缓冲区的偏移量,从此偏移量保存数据
DatagramPacket(byte data[], int size, InetAddress ipAddress, int port) 指定目标地址可端口,DatagramSocket对象使用该地址和端口确定将数据包发送到何处
DatagramPacket(byte data[], int offset, int size, InetAddress ipAddress, int port) 指定的数据偏移位置传递数据包
  • DatagramPacket类定义的方法
方法 描述
InetAddress getAddress() (为将要接收的数据报)返回源的地址或(为将要发送的数据报)返回目的地的地址
byte[] getData() 返回在数据报中包含的数据的字节数组。同用于在接收数据报之后,从数据报中接收数据
int getLength() 返回字节数组(由getData()方法返回)中包含的有效数据的长度,可能不等于整个字节数组的长度
int getOffset() 返回数据的起始索引
int getPort() 返回端口号
void setAddress(InetAddress ipAddress) 设置包的目的地址,目的地址是由ipAddress指定的
void setData(byte[] data) 将数据设置为data,将偏移量设置为0,将长度设置为data中字节的数量
void setData(byte[] data, int idx, int size) 将数设置为data,将偏移量设置为idx,将长度设置为size
void setLength(int size) 将包的长度设置为size
void setPort(int port) 将端口设置为port

URL

  • 构造函数
方法 描述
URL(String urlSpecifier)
URL(String protocolName, String hostName, int port, String path)
URL(String protocolName, String hostName, String path)
URL(URL urlObj, String urlSpecifier)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.net.MalformedURLException;
import java.net.URL;

public class LearnUrl1
{
public static void main(String args[]) throws MalformedURLException
{
URL url = new URL("http://www.baidu.com");

System.out.println("protocol :" + url.getProtocol());
System.out.println("Port:" + url.getPort());
System.out.println("Host:" + url.getHost());
System.out.println("File:" + url.getFile());
System.out.println("Ext:" + url.toExternalForm());
}
}

URLConnection

URLConnection是用于访问远程资源属性的通用类。一旦构造一个到远程服务器的连接,就可以使用URLConnection对象在实际传送远程对象到本地之前,检测远程对象的属性。这些属性是HTTP协议规范提供的,并且只对使用HTTP协议的URL对象有意义。

  • URLConnection类定义的方法
方法 描述
int getContentLength() 返回与资源关联的内容的字节大小。如果长度不可得,就返回-1
long getContentLengthLong() 返回与资源关联的内容的字节大小。如果长度不可得,就返回-1
String getContentType() 返回在资源中找到的内容的类型,也就是content-type标题的字段的值。如果内容类型不可得,就返回null
long getDate() 返回响应的时间和日期,使用从1970年1月1日(GMT时间)到现在经历的毫秒数的表示
long getExpiration() 返回资源种植的时间和日期,使用从1970年1月1日(GMT时间)到现在经历的毫秒数表示。如果有效日期不可得,就返回0
String getHeaderField(int idx) 返回idx索引位置标题字段的值。如果idx的值超出字段的数量,就返回null
String getHeaderField(String fieldName) 返回标题字段的值,名称由fieldName指定。如果没有找到指定的名称,就返回null
Stirng getHeaderFieldKey(int idx) 返回idx索引位置标题字体的键。如果idx的值超出字段的数量,就返回null
Map<String,List> getHeaderFields() 返回包含所有标题字段和值的映射
long getLastModified() 返回最后一次修改资源的时间和日期,使用从1970年1月1日(GMT时间)到现在经历的毫秒数表示。如果最后一次修改的日期不可得,就返回0
InputStream getInputStream() 返回链接到资源的InputStream对象。可以使用这个流获取资源的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;

public class LearnURLConnection1
{
public static void main(String args[]) throws Exception
{
int c;
URL url = new URL("http://www.baidu.com");
URLConnection urlCon = url.openConnection();

long d = urlCon.getDate();
if(d == 0) {
System.out.println("No date information");
} else {
System.out.println("Date:" + new Date(d));
}

long len = urlCon.getContentLengthLong();
if(len != 0) {
System.out.println("====content ====");
InputStream input = urlCon.getInputStream();
while((c = input.read()) != -1) {
System.out.print((char)c);
}

input.close();
} else {
System.out.println("No content available");
}
}
}

HttpURLConnection

HttpURLConnection用来支撑HTTP连接。

  • HttpURLConnection类定义的方法
方法 描述
static boolean getFollowRedirects() 如果重定向是自动进行的,就返回true;否则返回false。这个特性是默认打开的
String getRequestMethod() 返回一个字符串,表示生成URL请求的方式。默认为GET,也可以是其他方式。例如POST
int getResponseCode() 返回HTTP响应代码。如果不能获得响应代码,就返回-1。如果连接失败,那么会抛出IOException异常
Strng getResponseMessage() 返回与响应代码关联的响应消息。如果消息不可得,就返回null。如果连接失败,那么会抛出IOException异常
static void setFollowRedirects(boolean how) 如果how为true,那么重定向是自动进行的。如果how为false,那么重定向不是自动进行的。默认情况下,重定向是自动进行的
void setRequestMethod(String how) 将HTTP请求生成的方式设置成how指定的方式。默认方式是GET,但也可以是其他方式,例如POST.如果how无效,将会抛出ProtocolException异常
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.net.HttpURLConnection;
import java.net.URL;

public class LearnHttpURLConnection1
{
public static void main(String args[]) throws Exception
{
URL url = new URL("http://www.baidu.com");
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();

System.out.println("Request method is " + urlCon.getRequestMethod());
System.out.println("Response Message is " + urlCon.getResponseMessage());
}
}

URI

URI类封装了统一资源标识符(Uniform Resource Identifier)。URI与URL类似。实际上,URL是URI的一个子集。URI代表定位资源的一种标准方式。URL还描述了如何访问资源。