【javatcp-ipsocket】深入剖析socket——tcp套接字的生命周期-编程开发技术

【javatcp-ipsocket】深入剖析socket——tcp套接字的生命周期-编程开发技术

ID:30783478

大小:178.97 KB

页数:6页

时间:2019-01-03

【javatcp-ipsocket】深入剖析socket——tcp套接字的生命周期-编程开发技术_第1页
【javatcp-ipsocket】深入剖析socket——tcp套接字的生命周期-编程开发技术_第2页
【javatcp-ipsocket】深入剖析socket——tcp套接字的生命周期-编程开发技术_第3页
【javatcp-ipsocket】深入剖析socket——tcp套接字的生命周期-编程开发技术_第4页
【javatcp-ipsocket】深入剖析socket——tcp套接字的生命周期-编程开发技术_第5页
资源描述:

《【javatcp-ipsocket】深入剖析socket——tcp套接字的生命周期-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、[JavaTCP/IPSocket]深入剖析socket——TCP套接字的生命周期原文出处:兰亭风雨建立TCP连接???新的Socket实例创建后,就立即能用于发送和接收数据。也就是说,当Socket实例返回时,它已经连接到了一个远程终端,并通过协议的底层实现完成了TCP消息或握手信息的交换。客户端连接的建立Socket构造函数的调用与客户端连接建立吋所关联的协议事件之间的关系下图所示:关闭填人本地和述程地址jE在连擡连接匿立完戌■*地増口本地IP地址述程绻口号近程IP地址杠M口本地“堆址运程■口号址P口远程Ml口号i

2、ssimuPAXC.DAAC.D发送连接暗欢QQWXYNWXY.Z调用Socket(WJC.YZ.Q)阻样黑恃返貝实例创建数据结构图6-6客户瑞连接建立当客户端以服务器端的互联网地址W.X.Y.Z和端口号Q作为参数,调用Socket的构造函数时,底层实现将创建一个套接字实例,该实例的初始状态是关闭的。TCP开放握手也称为3次握手,这通常包括3条消息:一条从客户端到服务端的连接请求,一条从服务端到客户端的确认消息,以及另一条从客户端到服务端的确认消息。对客户端而言,一旦它收到了服务端发来的确认消息,就立即认为连接已经建立

3、。通常'这个过程发牛的很快,但连接请求消息或服务端的冋复消息都冇町能在传输过程中丢失,因此TCP协议实现将以递增的时间间隔重复发送几次握手消息。如杲TCP客户端在一段时间后还没有收到服务端的回复消息,则发生超时并放弃连接。如果服务端并没冇接收连接,则服务端的TCP将发送一条拒绝消息而不是确认消息。服务端连接的建立当客户端的事件序列则冇所不同。服务端首先创建一个ServerSocket实例,并将其与已知端口相关联(在此为Q),套接字实现为新的ServerSocket实例创建一个底层数据结构,并就Q赋给本地端口,并将特定的

4、通配符(*)赋给本地IP地址(服务器可能有多个IP地址,不过通常不会指定该参数),如下图所示:ID用ServerSocket(Q)阻宴等待返画实例创it数关闭本地嵐口国据结构本地IP地址远程■口号远程IP地址填入本堆■口号・设■状态***口Q本炖mtti:■远程■口号远程ip地址■图6・7服务21瑞的套接字设■现在服务端可以调用ServerSocket的accept()方法,来将阻塞等待客户端连接请求的到来。当客户端的连接请求到来时,将为连接创建一个新的套接字数据结构。该套接字的地址根据到來的分组报文设置:分组报文的目

5、标互联网地址和端口号成为该套接字的木地互联网地址和端口号;而分组报文的源地址和端口号则成为改套接字的远程互联网地址和端口号。注意,新套接字的本地端口号总是与ServerSocket的端口号一致。除了要创建一个新的底层套接字数据结构外,服务端的TCP实现还要向客户端发送一个TCP握手确认消息。如下图所示:sisfi«WPOSJUAJ雳侦听本地瑶口本地IP地址远程41口号远程【P地址Q■■■从A.B.C.D/P侦听传来的连1«请求本地■口Q本地1P地址远口号■远程IP地址■侦听水地増口Q本地IP地址■远SNIU号•远程IP

6、堆址■正在连接水堆・口址isfi«口号i&fiTHt址QWXY.ZPAXCD连接建立口本堆IP地址运割■口号i&SlPtt址QWXY.ZPA.B.C.D1■手宪成图6・8处理传入的连接请事■但是,对丁服务端来说,在接收到客户端发来的第3条消息之前,服务端TCP并不会认为握手消息己经完成。一旦收到客户端发來的第3条消息,则表示连接已建立,此时一个新的数据结构将从服务端所关联的列表屮移除,并为创建一个Socket实例,作为accept()方法的返回值。如下图所示:为此數熔结构返回Socket实例听本地Ml口本堆址远硕口号远

7、程IPM址Q■•图,8中的事件ttfr口粗im址却■口号iiSiPHk址Q■■侦听口Q本地IP地址asm口号■远程IP堆址■M4ffK«x>电SSMI*连捲建立*硕口本制Pit址彌■口号址QWXY.ZPA.B.C.DIN用accep<()方法阻亶■it立丁斷的连機图&9acceptf)处理?这里有非常重要的一点需要注意,在ServerSocket关联的列表中的每个数据结构,都代表了一个与另一端的客户端已经完成建立的TCP连接。实际上,客户只要收到了开放握手的第2条消息,就可以立即发送数据——这可能比服务端调用accep

8、t()方法为其获取一个Socket实例要早很长时间。关闭TCP连接TCP协议有一个优雅的关闭机制,以保证应用程序在关闭时不必担心正在传输的数据会丢失,这个机制述可以设计为允许两个方向的数据传输相互独立地终止。关闭机制的工作流程是:应用程序通过调用连接套接字的close()方法或shutdownOutput()方法表明数据已经发送完

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。