黑马程序员技术交流社区

标题: 关于Socket的方法 [打印本页]

作者: 湛添友    时间: 2014-4-28 15:01
标题: 关于Socket的方法
InetAddress getLocalAddress() 这个是 Socket榜绑定的地址
InetAddress getInetAddress() 这个是获取连接的地址

如果连接成功  ServerSocket应该用    getLocalAddredd()这个方法来获取客户端的ip吧??
作者: 小马初长成    时间: 2014-4-28 17:40
一、获取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;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2