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 接口。
版权声明: 本文为 InfoQ 作者【杨鹏Geek】的原创文章。
原文链接:【http://xie.infoq.cn/article/a5e3df7db3c590620c59c371e】。文章转载请联系作者。
评论