一、获取Socket的信息
在一个Socket对象中同时包含了远程服务器的IP地址和端口信息,以及客户本地的IP地址和端口信息。此外,从Socket对象中还可以获得输出流和输出流,分别用于向服务器发送数据。一下方法用于获取Socket的有关信息。
getInetAddress():获得远程服务器的IP地址。
getPort():获得远程服务器的端口。
getLocalAddress():获得客户本地的IP地址。
getInputStream():获得输入流,如果Socket还没有连接,或者已经关闭,或者已经通过shutdownInput()方法关闭输入流,那么此方法会抛出IOException。
getOutputStream():获得输出流。如果Socket还没有连接,或者已经关闭,或者已经通过shutdownOutput()方法关闭输出流,那么此方法会抛出IOException。
二、关闭Socket
当客户与服务器的通信结束,应当及时关闭Socket,以释放Socket占用的包括端口在内的各种资源。Socket的close()方法负责关闭Socket。当一个Socket对象被关闭。就不能再通过它的输入流和输出流进行I/O操作,否则会导致IOException。
为了确保关闭Socket的操作总是被执行,强烈建议吧这个操作放在finally代码块中。
Socket类提供了3个状态测试的方法:
isClose():如果Socket已经连接到了远程主机,并且还没关闭,则返回true,否则返回false。
isConnected():如果Socket曾经连接到远程主机,则返回true,否则返回false。
isBound():如果Socket已经与一个本地端口绑定,则返回true,否则返回false。
如果要判断一个Socket对象当前是否处于连接状态,可以采用以下方式:
boolean isConnected=socket.isConnected()&&!socket.isClosed();
三、半关闭Socket
如果仅仅是希望关闭输入流和输出流,可以采取Socket提供的半关闭方法。
shutdownInput():关闭输入流。
shutdownOuput():关闭输出流。
Socket还提供了两种方法来测试输入流和输出流是否关闭:
public boolean isInputShutdown():输入流关闭成功返回true,否则false;
public boolean isOutputShutdown():输出流关闭成功返回true,否则false; |