2023年7月15日发(作者:)
套接字Socket的学习总结1. 讲讲你对套接字编程的理解,它的协议是如何的?socket通常称为“套接字”,⽤于描述IP地址和端⼝,是⼀个通信链的句柄。应⽤程序通过套接字向⽹络发出请求或应答⽹络请求。服务器和客户端通过socket进⾏交互。服务器需要绑定在本机的某个端⼝号上,客户端需要声明⾃⼰连接哪个地址的哪个端⼝,这样服务器和客户端就能连接了。根据连接启动的⽅式以及本地套接字要连接的⽬标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,⽽是处于等待连接的状态,实时监控⽹络状态。(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的⽬标是服务器端的套接字。为此,客户端的套接字必须⾸先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端⼝号,然后就向服务器端套接字提出连接请求。(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建⽴⼀个新的线程,把服务器端套接字的描述发给客户端,⼀旦客户端确认了此描述,连接就建⽴好了。⽽服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。socket是对TCP/IP协议的封装和应⽤。在TCP/IP协议中,TCP协议通过三次握⼿建⽴⼀个可靠的连接。第⼀次握⼿:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进⼊SYN_SEND状态等待服务器确认。第⼆次握⼿:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送⼀个SYN包(syn=k),即SYN+ACK包,此时服务器进⼊SYN_RECV状态。第三次握⼿:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进⼊ESTABLISHED状态,完成三次握⼿。服务器socket与客户端socket建⽴连接的部分其实就是“三次握⼿”。2. socket和http的区别socket连接:socket不属于协议范畴,⽽是⼀个调⽤接⼝(API),是对TCP/IP协议的封装。实现服务器与客户端之间的物理连接,并进⾏数据传输。Socket处于⽹络协议的传输层,主要有TCP/UDP两个协议。socket连接是长连接,理论上客户端和服务器端⼀旦建⽴起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,⽐如:服务器端或客户端主机宕机了、⽹络故障,或者两者之间长时间没有数据传输,⽹络防⽕墙可能会断开该连接以释放⽹络资源。所以当⼀个socket连接中没有数据的传输,那么为了维持连接需要发送⼼跳消息。socket传输的数据可⾃定义,为字节级,数据量⼩,可以加密,数据安全性⾼,适合Client/Server之间信息实时交互。http连接:HTTP是基于TCP/IP协议的应⽤层协议,定义的是传输数据的内容的规范。HTTP是基于请求-响应形式并且是短连接,即客户端向服务器端发送⼀次请求,服务器端响应后连接即会断掉。HTTP是⽆状态的协议,针对其⽆状态特性,在实际应⽤中⼜需要有状态的形式,因此⼀般会通过session/cookie技术来解决此问题。HTTP的传输速度慢,数据包⼤,数据传输安全性差,如实现实时交互,服务器性能压⼒⼤。3. socket和http的应⽤场景有哪些socket⼀般⽤于⽐较即时的通信和实时性较⾼的情况,⽐如推送,聊天,保持⼼跳长连接等;http⼀般⽤于实时性要求不那么⾼的情况,⽐如信息反馈,图⽚上传,获取新闻信息等。某些场合使⽤http不使⽤socket的原因是socket⼀旦连接上了,就⼀直保持连接,就会造成阻塞IO,与此相对的的,还有⾮阻塞IO。阻塞IO是指客户端请求服务器端,服务器端进⾏处理后,返回值给客户端。但当客户端太多、同时并发请求的时候,服务器端处理不过来,就会卡,因此提出了⾮阻塞IO,客户端请求服务器端,服务器端有⼀些监听器负责接受请求,接受好了,就告诉客户端已经接受好了,处理完后把数据发给客户端。阻塞和⾮阻塞关注的是程序在等待调⽤结果(消息,返回值)时的状态。阻塞调⽤是指调⽤结果返回之前,当前线程会被挂起。调⽤线程只有在得到结果之后才会返回。⾮阻塞调⽤指在不能⽴刻得到结果之前,该调⽤不会阻塞当前线程。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689410699a243604.html
评论列表(0条)