java socket 配置项

本文详细介绍了Java Socket的配置选项,包括socket关闭、设置选项、服务类型设置、连接时间、延迟和带宽的重要性、ServerSocket选项、SelectableChannel和Selector操作、DatagramSocket选项、IP服务类型以及远程方法的参数和返回值处理。同时讨论了分布式的垃圾回收机制,强调了线程安全和租约期限在远程对象管理中的作用。
摘要由CSDN通过智能技术生成

socket关闭

  1. 在使用socket通信时, 如果服务端关闭socket, 客户端会继续发送完毕数据, 但是服务端接受数据时抛出socket已经关闭的异常.
  2. 在socket通信时, 如果客户端没有关闭socket, 客户端直接退出, 服务端会抛出Connection reset异常.
  3. 在socket通信时, 如果客户端关闭socket,或者输出流, 这时处于半关闭状态, 服务端接受到EOF。

Socket 设置选项

 

  1. TCP_NODELAY : 其实是设置是否使用延迟发送机制
  2. SO_RESUSEADDR : socket的close()方法是否立即释放本地端口.
  3. SO_TIMEOUT: 接受数据等待的最大时间. 毫秒
  4. SO_LINGER: 默认情况 socket的close 会立即返回, 但底层的socket实际不会立即关闭, 是发送完所有数据才关闭. 如果socket.setSoLinger(true,3600), socket会阻塞3600秒返回或者发送完所有数据关闭底层连接后返回
  5. SO_RCVBUF: 接受缓冲区, 缓冲区较大可以减少数据传输的次数, 提高效率.
  6. SO_SNDBUF: 同上
  7. SO_KEEPALIVE: 为true时,底层的TCP如果超过2小时没有和服务端通信过, 会发送数据包给服务端, 服务端如果未响应则会持续11分钟的尝试, 直到收到响应为止.如果12分钟未收到回应, 关闭本地socket.; 默认false
  8. OOBINLINE :true-> 表示支持一个字节的紧急数据, socket的sendUrgentData(int data) 用于发送紧急数据, 默认为false-> 丢弃紧急数据.

 

Socket服务类型设置

IP规定4中服务类型, 用来描述服务的质量.

  1. 低成本0x02
  2. 高可靠 0x 04
  3. 最高吞吐量 0x08
  4. 最小延迟 0x10   tips: 这四中可以组合使用, 通过|

Socket socket = ...; socket.setTrafficClass(0x 04);

Socket设置 连接时间, 延迟, 带宽 相对重要性

setPerformancePreferences(int connectionTime, int latency, int bandwidth)

这三个参数如题,可以随意的进行赋值,他们之间的相对大小表示相对的重要性.

 

ServerSocket 选项

SO_TIMEOUT: 表示等待客户连接的超时时间. accept()等待客户连接的时间, 毫秒值

SO_REUSEADDR: 和socket的SO_RESUEADDR 选项相同, 如果网络上有数据向旧ServerSocket传输数据, 是否允许新的ServerSocket绑定到旧的ServerSocket同样的端口.

    Tips: 当服务器程序关闭时, 默认底层端口还会被占用一段时间, 当服务重启时,导致端口被占用.  设置为true后, 端口可以被立刻重用.

 

SelectableChannel 的register() 和 Selector 的select()

都会操纵Selector对象的共享资源all-keys集合,  如果select()阻塞, 它拿着all-keys的内置锁, register()方法也会阻塞...... 因此在register()注册事件时,不允许在select()上阻塞.

 

DatagramSocket 的选项

SO_TIMEOUT: 表示接受数据报时的等待超时时间

SO_RCVBUF: 表示接受数据的缓冲区的大小. UDP接受数据后,如果缓冲区满, 再次到达的数据会被丢弃.

SO_SNDBUF: 发送数据缓冲区的大小, 很多网络都限定了这个的最大值, 超过该值所作的修改无效.

SO_REUSEADDR 选项对于UDP并非TCP的含义, 它决定着多个DatagramSocket 是否可以同时绑定到相同的IP地址和端口.到达该端口的数据报会复制到所有的DatagramSocket.

SO_BROADCAST 选项 决定是否允许对网络广播地址收发数据报。默认为true.

 

IP服务类型

 

设置服务类型: setTrafficClass(int transferClass)

低成本 0x02 ;

高可靠性: 0x04;

最高吞吐量: 0x08;

最小延迟: 0x10;

 

远程方法中的参数和返回值

分布式的垃圾回收

远程对象如果被多人访问, 自己需要保证它是线程安全的类.

 

只有当一个远程对象 不受任何本地引用和远程引用, 这个远程对象才会结束生命周期.

 

Ways: 当客户端持有服务端远程对象的存根时, 客户端对这个远程对象有一个租约期限.

期限通过java.rmi.dgc.leaseValue设置, 毫秒单位. 默认10分钟, 当到达租约期限一半时间, 客户端如果还持有远程引用, 会再次向服务器发送租约通知.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值