美文网首页
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学习(三)

    一、获取Socket的信息 在一个Socket 对象中同时包含了远程服务器的IP 地址和端口信息, 以及客户本地的...

  • tcp三次握手四次挥手

    tcp三次握手四次挥手 TCP状态图 TCP状态时序图 tcp三次握手 流程图: TCP握手状态说明: TCP_S...

  • TCP 三次握手 和 四次挥手

    在聊到网络协议的时候,总是会说到TCP的三次握手和四次挥手,这里也整理记录下学习的整个过程。 TCP 三次握手 三...

  • 星媛面试-进大厂必备--TCP协议

    1,tcp三次握手 TCP A ...

  • 浅谈 TCP

    这篇文章介绍 TCP 理论,主要分为「TCP 连接,TCP 优化,TCP 重连」三个方面。看《TCP/IP 详解》...

  • 传输层

    ICMP UDP TCP TCP的三次握手 TCP四次挥手 TCP状态机Tcp_status_map.jpg

  • day 27 操作系统基础网络章节

    TCP/UDP协议说明 TCP协议三次握手过程原理 TCP协议四次挥手过程原理 问题: TCP十一种状态集转换 三...

  • TCP协议详解

    TCP 前言网络模型简图 一、TCP协议结构 二、TCP三次握手与状态流转 三、TCP四次挥手与状态流转 前言 网...

  • 一些概念

    TCP,三次握手,传递包 TCP与UDP TCP(Transmission Control Protocol,传输...

  • 2019-11-06

    今天学习了TCP

网友评论

      本文标题:TCP学习(三)

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