Java网络编程核心技术详解(视频微课版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.7 小结

除了Socket的第1个不带参数的构造方法,其他构造方法都会试图建立与服务器的连接,如果连接成功,就返回Socket对象;如果因为某些原因连接失败,就会抛出IOException。

当客户请求与服务器程序连接时,可能要等待一段时间。默认情况下,客户会一直等待下去,直到连接成功,或者出现异常。如果希望限定等待连接的时间,可通过connect(SocketAddress endpoint,int timeout)方法来设置超时时间,参数timeout表示超时时间,以ms为单位。

在通信过程中,如果发送方没有关闭Socket,就突然终止程序,接收方在接收数据时会抛出SocketException。发送方发送完数据后,应该及时关闭Socket或者关闭Socket的输出流,这样,接收方就能顺利读到输入流的末尾。

Socket有许多选项,用来控制建立连接、接收和发送数据,以及关闭Socket的行为。

·TCP_NODELAY:表示立即发送数据。

·SO_RESUSEADDR:表示是否允许重用Socket所绑定的本地地址。

·SO_TIMEOUT:表示接收数据时的等待超时时间。

·SO_LINGER:表示当执行Socket的close()方法时,是否立即关闭底层的Socket。

·SO_SNDBUF:表示发送数据的缓冲区的大小。

·SO_RCVBUF:表示接收数据的缓冲区的大小。

·SO_KEEPALIVE:表示对于长时间处于空闲状态的Socket,是否要自动把它关闭。

·OOBINLINE:表示是否支持发送1字节的TCP紧急数据。