美文网首页
TCP学习(三)

TCP学习(三)

作者: W_Nicotine | 来源:发表于2018-03-31 18:29 被阅读0次

    一、获取Socket的信息

    在一个Socket 对象中同时包含了远程服务器的IP 地址和端口信息, 以及客户本地的IP地址和端口信息. 此外, 从Socket 对象中还可以获得输出流和输入流, 分别用于向服务器发送数据, 以及接收从服务器端发来的数据.

    以下方法用于获取Socket的有关信息
     getInetAddress(): 获得远程服务器的IP地址.
    
    getPort(): 获得远程服务器的端口. 
    
    getLocalAddress(): 获得客户本地的IP 地址.
    
    getLocalPort(): 获得客户本地的端口.
    
     getInputStream(): 获得输入流. 
    

    如果Socket 还没有连接, 或者已经关闭, 或者已经通过
    shutdownInput()方法关闭输入流, 那么此方法会抛出IOException. getOutputStream(): 获得输出流, 如果Socket 还没有连接, 或者已经关闭, 或者已经通过shutdownOutput() 方法关闭输出流, 那么此方法会抛出IOException.
    在HTTPClient 类中, 先创建了一个连接到该HTTP服务的Socket对象, 然后发送符合HTTP 协议的请求, 接着接收从HTTP 服务器上发回的响应结果.

    二、关闭Socket

    当客户与服务器的通信结束, 应该及时关闭Socket , 以释放Socket 占用的包括端口内的各种资源.
    Socket 的 close() 方法负责关闭Socket. 当一Socket对象被关闭, 就不能再通过它的输入流和输出流进行I/O操作, 否则会导致IOException.
    为了确保关闭Socket 的操作总是被执行, 强烈建议把这个操作放在finally 代码块中:

      Socket socket = null; try{  
            socket = new Socket(www.javathinker.org,80);  //执行接收和发送数据的操作        ..........  
       }catch(IOException e){  
        e.printStackTrace(); 
     }finally{ 
           try{
                   if(socket != null)  socket.close(); 
           }
    catch(IOException e){e.printStackTrace();
    } 
       } 
    

    Socket 类提供了3 个状态测试方法.
    isClosed(): 如果Socket已经连接到远程主机, 并且还没有关闭, 则返回true , 否则返回false .
    isConnected(): 如果Socket曾经连接到远程主机, 则返回true , 否则返回false .
    isBound(): 如果Socket已经与一个本地端口绑定, 则返回true , 否则返回false .

    如果要判断一个Socket 对象当前是否处于连接状态, 可采用以下方式:
    boolean isConnected = socket.isConnected() && !socket.isClosed();

    三、设置Socket 的选项

    Socket 有以下几个选项.

    TCP_NODELAY: 表示立即发送数据.
    SO_RESUSEADDR: 表示是否允许重用Socket 所绑定的本地地址.
    SO_TIMEOUT: 表示接收数据时的等待超时数据.
    SO_LINGER: 表示当执行Socket 的 close()方法时, 是否立即关闭底层的Socket.
    SO_SNFBUF: 表示发送数据的缓冲区的大小.
    SO_RCVBUF: 表示接收数据的缓冲区的大小.
    SO_KEEPALIVE: 表示对于长时间处于空闲状态的Socket , 是否要自动把它关闭.
    OOBINLINE: 表示是否支持发送一个字节的TCP 紧急数据.

    相关文章

      网友评论

          本文标题:TCP学习(三)

          本文链接:https://www.haomeiwen.com/subject/xkqncftx.html