网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java套接字Socket编程—TCP参数

Java套接字Socket编程--TCP参数 在Java的Socket中,主要包含了以下可设置的TCP参数。 属性说明默认值SO_TIMEOUT对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长空等待时间。0TCP_NODELAY是否一有数据就马上发送。falseSO_LINGER优雅地关闭套接字,或者立刻关闭。-1SO_SNDBUF发送数据的缓冲区大小。8KSO_RCVBUF接收数据的缓冲区大小。8KSO_KEEPALIVE是否启用心跳机制。falseSO_REUSEADDR是否地址重用。falseBACKLOG服务端处理线程全忙后,允许多少个新请求进入等待。50 BACKLOG BACKLOG用于构造服务端套接字ServerSocket对象,标识当服务器请求处理线程全满时,用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1,Java将使用默认值50。 ServerSocket serverSocket = new ServerSocket(8080, 100);  TCP_NODELAY 在TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。这里就涉及到一个名为Nagle的算法,该算法的目的就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。 TCP_NODELAY选项,就是用于启用或关于Nagle算法。如果要求高实时性,有数据发送时就马上发送,就将该选项设置为true关闭Nagle算法;如果要减少发送次数减少网络交互,就设置为false等累积一定大小后再发送。默认为false。 Socket中操作该属性的方法如下: void setTcpNoDelay(boolean on) 启用/禁用 TCP_NODELAY(启用/禁用 Nagle 算法)。 boolean getTcpNoDelay() 测试是否启用 TCP_NODELAY。 关于Nagle算法介绍,请参考附录部分。 SO_TIMEOUT 对于服务端套接字ServerSocket来说,SO_TIMEOUT表示服务端accept方法空等待客户端连接的最长时间;对于客户端套接字Socket来说,SO_TIMEOUT表示输入流读取数据read方法的最长等待时间。一旦超过设置的SO_TIMEOUT,程度将抛出超时???常。 ServerSocket/Socket中操作该属性的方法如下: int getSoTimeout() 返回 SO_TIMEOUT 的设置。 void setSoTimeout(int timeout) 启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。 使用示例: ServerSocket serverSocket = new ServerSocket(8080); serverSocket.setSoTimeout(30000); Socket clientSocket = serverSocket.accept(); clientSocket.setSoTimeout(20000); SO_LINGER 当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据。处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接。事实上,SO_LINGER并不被推荐使用,大多数情况下我们推荐使用默认的关闭方式(即下方表格中的第一种情况)。 下方代码段显示linger结构语法,表格为不同参数情况下的套接字行为。 typedef struct linger { u_short l_onoff; //开关,零或者非零 u_short l_linger; //优雅关闭最长时限 } linger;  各字段与对应行为如下表所示。 l_onoffl_lingerclosesocket行为发送队列底层行为零忽略立即返回。保持直至发送完成。系统接管套接字并保证将数据发送至对端。非零零立即返回。立即放弃。直接发送RST包,自身立即复位,不用经过2MSL状态。对端收到复位错误号。非零非零阻塞直到l_linger时间超时或数据发送完成。(套接字必须设置为阻塞)在超时时间段内保持尝试发送,若超时则立即放弃。超时则

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档