Bootstrap

26《重学JAVA》--网络编程之Socket类

一、Socket类

Socket实质上提供了进程通信的端点。

报文之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

1. 服务器监听:是服务器端报文并不定位具体的客户端报文,而是处于等待连接的状态,实时监控网络状态。

2. 请求客户端:是指由客户端的报文提出连接请求,要连接的目标是服务器端的报文。为此,客户端的报文必须首先描述它要连接的服务器的报文,指出服务器端报文的地址和端口号,然后就向服务器端报文提出连接请求。

3. 确认连接:是指当服务器端报文监听到或者说接收到客户端报文的连接请求,它就响应客户端报文的请求,建立一个新的线程,把服务器端报文的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端报文继续处于监听状态,继续接收其他客户端报文的连接请求。

 

二、TCPSocket

TCPSocket编程提供了两个核心类:Socket和ServerSocket,分别用来表示双向连接的客户端和服务器端。

 

Socket常用的构造方法有:Socket(InetAddressaddress,intport):创建Socket对象,并指定远程主机IP地址和端口号。

 

Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort):创建Socket对象,并指定远程主机IP地址和端口号,以及本机的IP地址(localAddr)和端口号(localPort)。

 

Socket(Stringhost,intport):创建Socket对象,并指定远程主机名和端口号,IP地址为null,null表示回送地址,即127.0.0.1。Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort):创建Socket对象,并指定远程主机和端口号,以及本机的IP地址(localAddr)和端口号(localPort)。

 

host主机名,IP地址为null,null表示回送地址,即127.0.0.1。Socket其他的常用方法有:InputStreamgetInputStream():通过此Socket返回输入流对象。

 

OutputStreamgetOutputStream():通过此Socket返回输出流对象。intgetPort():返回Socket连接到的远程端口。

 

intgetLocalPort():返回Socket绑定到的本地端口。

 

InetAddressgetInetAddress():返回Socket连接的地址。

 

InetAddressgetLocalAddress():返回Socket绑定的本地地址。

 

booleanisClosed():返回Socket是否处于关闭状态。

 

booleanisConnected():返回Socket是否处于连接状态。

 

voidclose():关闭Socket。

 

注意Socket与流类似所占用的资源,不能通过JVM的垃圾收集器回收,需要程序员释放。一种方法是可以在finally代码块调用close()方法关闭Socket,释放流所占用的资源。另一种方法通过自动资源管理技术释放资源,Socket和ServerSocket都实现了AutoCloseable接口。