Java套接字Socket编程--TCP参数.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java 套接字 Socket 编程--TCP 参数 在 Java 的 Socket 中,主要包含了以下可设置的 TCP 参数。 属性 属性 说明 默认值 SO_TIMEOUT TCP_NODELAY SO_LINGER SO_SNDBUF SO_RCVBUF SO_KEEPALIVE SO_REUSEADDR BACKLOG 对 ServerSocket 来说表示等待连接的最长空等 待时间; 对 Socket 来说表示读数据最长空等待时间。 是否一有数据就马上发送。 优雅地关闭套接字,或者立刻关闭。发送数据的缓冲区大小。 接收数据的缓冲区大小。是否启用心跳机制。 是否地址重用。 服务端处理线程全忙后,允许多少个新请求进入等待。 0 false -1 8K 8K false false 50 BACKLOG ServerSocketserverSocket=newServerSocket(8080,100);BACKLOG 用于构造服务端套接字 ServerSocket 对象,标识当服务器请求处理线程全满时,用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1,Java 将使用默认值50。 ServerSocketserverSocket=newServerSocket(8080,100); TCP_NODELAY 在 TCP/IP 协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送 ACK 表示确认。为了尽可能的利用网络带宽,TCP 总是希望尽可能的发送足够大的数据。这里就涉及到一个名为 Nagle 的算法,该算法的目的就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。 TCP_NODELAY 选项,就是用于启用或关于 Nagle 算法。如果要求高实时性,有数据发送时就马上发送,就将该选项设置为true 关闭 Nagle 算法;如果要减少发送次数减少网络交互,就设置为false 等累 voidsetTcpNoDelay(booleanon)启用/禁用 TCP_NODELAY(启用/禁用 Nagle 算法)。 voidsetTcpNoDelay(booleanon) 启用/禁用 TCP_NODELAY(启用/禁用 Nagle 算法)。 booleangetTcpNoDelay() 测试是否启用 TCP_NODELAY。 关于 Nagle 算法介绍,请参考附录部分。 SO_TIMEOUT 对于服务端套接字 ServerSocket 来说,SO_TIMEOUT 表示服务端 accept 方法空等待客户端连接的最长时间;对于客户端套接字 Socket 来说,SO_TIMEOUT 表示输入流读取数据 read 方法的最长等待时间。一旦超过设置的 SO_TIMEOUT,程度将抛出超时异常。 ServerSocket/Socket 中操作该属性的方法如下: intgetSoTimeout() intgetSoTimeout() 返回 SO_TIMEOUT 的设置。 voidsetSoTimeout(inttimeout) 启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。 使用示例: ServerSocketserverSocket=newServerSocket(8080); ServerSocketserverSocket=newServerSocket(8080); serverSocket.setSoTimeout(30000); SocketclientSocket=serverSocket.accept(); clientSocket.setSoTimeout(20000); SO_LINGER 当调用 closesocket 关闭套接字时,SO_LINGER 将决定系统如何处理残存在套接字发送队列中的数据。处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接。事实上, SO_LINGER 并不被推荐使用,大多数情况下我们推荐使用默认的关闭方式(即下方表格中的第一种情况)。 下方代码段显示 linger 结构语法,表格为不同参数情况下的套接字行为。 typedefstructlinger{ typedefstructlinger{ u_shortl_onoff; //开关,零或者非零 u_shortl_linger; u_shortl_linger; }linger; //优雅关闭最长时限 各字段与对应行为如下表所示。 l_onoff l_linger closesocket 行为 发送队列 底层行为 零 忽略 立即返回。 保持直至发送完成。 系统接管套接字并保证将数据发送至对端。 非零 零 立即返回。 立即放弃。 直接发送 RST

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档