ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:20.78KB ,
资源ID:6705451      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/6705451.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(Java套接字Socket编程--TCP参数.docx)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

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

1、 Java套接字Socket编程--TCP参数 在Java的Socket中,主要包含了以下可设置的TCP参数。 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长空等待时间。 0 TCP_NODELAY 是否一有数据就马上发送。 false SO_LINGER 优雅地关闭套接字,或者立刻关闭。 -1 SO_SNDBUF 发送数据的缓冲区大小。 8K SO_RCVBUF 接收数据的缓冲区大小。 8K SO_KEEPALIVE 是否启用心跳机制。 false S

2、O_REUSEADDR 是否地址重用。 false BACKLOG 服务端处理线程全忙后,允许多少个新请求进入等待。 50 1.1 BACKLOG BACKLOG用于构造服务端套接字ServerSocket对象,标识当服务器请求处理线程全满时,用于临时存放已完成三次握手的请求的队列的最大长度。如果未设置或所设置的值小于1,Java将使用默认值50。 ServerSocket serverSocket = new ServerSocket(8080, 100); 1.2 TCP_NODELAY 在TCP/IP协议中,无论发送多少数据,总是要在数据前面加

3、上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。这里就涉及到一个名为Nagle的算法,该算法的目的就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。 TCP_NODELAY选项,就是用于启用或关于Nagle算法。如果要求高实时性,有数据发送时就马上发送,就将该选项设置为true关闭Nagle算法;如果要减少发送次数减少网络交互,就设置为false等累积一定大小后再发送。默认为false。 Socket中操作该属性的方法如下: void setTcpNoDelay(boolean on)

4、 启用/禁用 TCP_NODELAY(启用/禁用 Nagle 算法)。 boolean getTcpNoDelay() 测试是否启用 TCP_NODELAY。 关于Nagle算法介绍,请参考附录部分。 1.3 SO_TIMEOUT 对于服务端套接字ServerSocket来说,SO_TIMEOUT表示服务端accept方法空等待客户端连接的最长时间;对于客户端套接字Socket来说,SO_TIMEOUT表示输入流读取数据read方法的最长等待时间。一旦超过设置的SO_TIMEOUT,程度将抛出超时异常。 ServerSocke

5、t/Socket中操作该属性的方法如下: int getSoTimeout() 返回 SO_TIMEOUT 的设置。 void setSoTimeout(int timeout) 启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。 使用示例: ServerSocket serverSocket = new ServerSocket(8080); serverSocket.setSoTimeout(30000); Socket clientSocket = serverSocket.accept(

6、); clientSocket.setSoTimeout(20000); 1.4 SO_LINGER 当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据。处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接。事实上,SO_LINGER并不被推荐使用,大多数情况下我们推荐使用默认的关闭方式(即下方表格中的第一种情况)。 下方代码段显示linger结构语法,表格为不同参数情况下的套接字行为。 typedef struct linger { u_short l_onoff; //开关,零或者非零

7、u_short l_linger; //优雅关闭最长时限 } linger; 各字段与对应行为如下表所示。 l_onoff l_linger closesocket行为 发送队列 底层行为 零 忽略 立即返回。 保持直至发送完成。 系统接管套接字并保证将数据发送至对端。 非零 零 立即返回。 立即放弃。 直接发送RST包,自身立即复位,不用经过2MSL状态。对端收到复位错误号。 非零 非零 阻塞直到l_linger时间超时或数据发送完成。(套接字必须设置为阻塞) 在超时时间段内保持尝试发送,若超时则立即放弃。 超时则同第二种情况,若发送

8、完成则皆大欢喜。 Socket中操作该属性的方法如下: void setSoLinger(boolean on, int linger) 启用/禁用具有指定逗留时间(以秒为单位)的SO_LINGER。 Linger最大取值为65535。 int getSoLinger() 返回 SO_LINGER 的设置。默认值为-1。 由于getSoLinger()方法返回的-1没有太多意思,我们查看到Java的默认实现PlainSocketImpl.c文件中,赋值操作代码片段如下所示。 /* * Class: java_net_

9、PlainSocketImpl * Method: socketSetOption * Signature: (IZLjava/lang/Object;)V */ JNIEXPORT void JNICALL Java_java_net_PlainSocketImpl_socketSetOption(JNIEnv *env, jobject this, jint cmd, jboolean on,

10、 jobject value) { … switch (cmd) { case java_net_SocketOptions_SO_SNDBUF : case java_net_SocketOptions_SO_RCVBUF : case java_net_SocketOptions_SO_LINGER : case java_net_SocketOptions_IP_TOS : { … if (cm

11、d == java_net_SocketOptions_SO_LINGER) { if (on) { optval.ling.l_onoff = 1; optval.ling.l_linger = (*env)->GetIntField(env, value, fid); } else { optval.ling.l_onoff = 0;

12、 optval.ling.l_linger = 0; } optlen = sizeof(optval.ling); } else { optval.i = (*env)->GetIntField(env, value, fid); optlen = sizeof(optval.i); } break

13、 } /* Boolean -> int */ default : optval.i = (on ? 1 : 0); optlen = sizeof(optval.i); } … } 从蓝色字体部分代码可以看出,只要赋值为false,则底层linger结构中的l_onoff和l_linger的值均为0,符合表中的第一种情况。 1.5 SO_SNDBUF 发送缓冲区的大小设置,默认为8K。 Socket中操作该属性的方法如下: void setS

14、endBufferSize(int size) 将此 Socket 的 SO_SNDBUF 选项设置为指定的值。 int getSendBufferSize() 获取此 Socket 的 SO_SNDBUF 选项的值,该值是平台在 Socket 上输出时使用的缓冲区大小。 1.6 SO_RCVBUF 接收缓冲区大小设置,默认为8K。该属性既可以在ServerSocket实例中设置,也可以在Socket实例中设置。 ServerSocket/Socket中操作该属性的方法如下: void setReceiveBufferSize(int size)

15、 将此 Socket 的 SO_RCVBUF 选项设置为指定的值。 int getReceiveBufferSize() 获取此 Socket 的 SO_RCVBUF 选项的值,该值是平台在 Socket 上输入时使用的缓冲区大小。 1.7 SO_KEEPALIVE 套接字本身是有一套心跳保活机制的,不过默认的设置并不像我们一厢情愿的那样有效。在双方TCP套接字建立连接后(即都进入ESTABLISHED状态)并且在两个小时左右上层没有任何数据传输的情况下,这套机制才会被激活。 很多人认为两个小时的时间设置得很不合理。为什么不设置成为10

16、分钟,或者更短的时间?(可以通过SO_KEEPALIVE选项设置。)但是这样做其实并不被推荐。实际上这套机制只是操作系统底层使用的一个被动机制,原理上不应该被上层应用层使用。当系统关闭一个由KEEPALIVE机制检查出来的死连接时,是不会主动通知上层应用的,只有在调用相应的IO操作在返回值中检查出来。 在《UNIX网络编程第1卷》中也有详细的阐述: SO_KEEPALIVE 保持连接检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方 发一个保持存活探测分节(keepalive probe)。这是一

17、个对方必须响应的TCP分节.它会导致以下三种情况:对方接收一切正常:以期望的ACK响应。2小时后,TCP将发出另一个探测分节。对方已崩溃且已重新启动:以RST响应。套接口的待处理错误被置为ECONNRESET,套接口本身则被关闭。对方无任何响应:源自berkeley的TCP发送另外8个探测分节,相隔75秒一个,试图得到一个响应。在发出第一个探测分节11分钟 15秒后若仍无响应就放弃。套接口的待处理错误被置为ETIMEOUT,套接口本身则被关闭。如ICMP错误是“host unreachable(主机不可达)”,说明对方主机并没有崩溃,但是不可达,这种情况下待处理错误被置为 EHOSTUNREA

18、CH。 因此,忘记SO_KEEPALIVE,在应用层自己写一套保活机制比较靠谱。 Socket中操作该属性的方法如下: boolean getKeepAlive() 测试是否启用 SO_KEEPALIVE。 void setKeepAlive(boolean on) 启用/禁用 SO_KEEPALIVE。 1.8 SO_REUSEADDR 是否重用处于TIME_WAIT状态的地址。默认为false。 Socket中操作该属性的方法如下: boolean getReuseAddress() 测试是否启用 SO_REUSEADDR。 void setReuseAddress(boolean on) 启用/禁用 SO_REUSEADDR 套接字选项。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服