套接字socket的作用
以计算机为例,套接字socket的作用是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定 , 用套接字中的相关函数来完成通信过程 。
TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口 。套接字用(IP地址:端口号)表示 。它是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口 。流式套接字用于提供面向连接、可靠的数据传输服务 。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收 。流式套接字之所以能够实现可靠的数据服务 , 原因在于其使用了传输控制协议,即TCP(TheTransmissionControlProtocol)协议 。
什么是套接字?其作用是什么?套接字(socket)是用于网络通信的基本操作单元 。简单的说就是通信的两方的一种约定 , 用套接字中的相关函数来完成通信过程 。
套接字可以根据通信性质分类,主要分
流式套接字(SOCK_STREAM),
数据报套接字(SOCK_DGRAM)以及原始套接字(SOCK_RAW).
数据报套接字提供了一种不可靠的、非连接的数据包通信方式 。所以
数据报套接字使用UDP协议,当然,winsock
2版本还支持其他协议 。
允许应用程序创建网络套接字套接字是一套用C语言写成的应用程序开发库 , 它首先是一个库 。主要作用就是实现进程间通信和网络编程,因此在网络应用开发中被广泛使用 。
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据 , 可对其进行像对文件一样的打开、读写和关闭等操作 。套接字允许应用程序与网络中的其他应用程序进行通信 。网络套接字是IP地址与端口的组合 。
在Python中可以基于套接字来使用传输层提供的传输服务,并以此进行开发网络应用 。实际开发中使用的套接字可以分为三类:流套接字(TCP套接字)、数据报套接字和原始套接字 。
Socket详解1、 Socket(套接字)概念
网络上两个程序通过一个双向的通信连接实现数据的交换,这个连接的一段称为一个 socket ,socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元 。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址 , 本地进程的协议端口 , 远地主机的IP地址,远地进程的协议端口 。
Socket是对TCP/IP协议的封装,它把复杂的TCP/IP协议族隐藏在Socket接口后面 , 提供一个易用的接口,所以Socket本身并不是协议 , 而是一个调用接口(API) 。
在一定程度可以认为Socket位于应用层和传输层之间 。创建Socket连接时,可以指定使用的传输层协议 , Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接 。
2、 建立Socket连接
建立Socket连接至少需要一对套接字 , 其中一个运行于客户端,称为ClientSocket , 另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为 三个步骤 :
(1)服务器监听:服务器端套接字并不定位具体的客户端套接字 , 而是处于等待连接的状态,实时监控网络状态 , 等待客户端的连接请求 。
(2)客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字 。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求 。
(3)连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时 , 就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户 端 , 一旦客户端确认了此描述,双方就正式建立连接 。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求 。
3、 Socket连接与HTTP连接
由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开 。但在实际网络应用 中 , 客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等 , 大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络 , 该连接处于活跃状态 。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据 。
4、 关于Socket长连接的心跳包
心跳包就是为了避免一个连接长时间不活跃被关闭而定时发送的一个”骚扰”数据包 。
Socket本身就是长连接的,那么为什么还要心跳包呢?
理论上说 , 这个连接是一直保持连接的,但是实际情况中 , 如果中间节点出现什么故障是难以知道的 。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉 。在这个时候,就需要我们的心跳包了 , 用于维持长连接,保活 。在获知了断线之后 , 服务器逻辑可能需要做一些事情,比如断线后的数据清理 , 重新连接……当然,这个自然是要由逻辑层根据需求去做了 。总的来说 , 心跳包主要也就是用于长连接的保活和断线处理 。一般的应用下,判定时间在30-40秒比较不错 。如果实在要求高 , 那就在6-9秒 。
如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的socket回收了才会关闭 。为什么需要心跳连接?主要是为了判断当前连接是否是有效的、可被使用的 。在实际应用中假设一段时间没有数据传输时候理论上说应该连接是没有问题的,但是网络复杂,中途出现问题也是常见的,网线被掐断了、对方进程挂掉了、频繁丢包等 , 这时候TCP连接是不可使用的,但是对于应用层并不知道,如果需知道网络情况则要很复杂的超时进行了解 , TCP从底层就实现了这样的功能 。心跳机制是TCP在一段时间间隔后发送确认连接端是否还存在,如果存在的话就会回传一个包确定网络有效 , 如果心跳包有问题,则通知上层应用当前网络有问题了 。
这取决于你的server端的超时配置 , 每个socket连接都是长连接,它是一个相当占用系统资源的通信管道,如果这个长连接什么事也没干硬是要占着资源,则server端可以选择关闭这个连接 , 以省下资源让更多的用户连接进来 。
所以,即便客户端的是采用死循环while(true)方式连到服务端,对于特定的客户端和服务端类型来说也需要一定时间间隔的心跳(告诉服务端,我还活着 , 虽然我没干活也没说话,但别把我关了)
文章插图
【套接字socket的作用,什么是套接字?其作用是什么?】以上就是关于套接字socket的作用,什么是套接字?其作用是什么?的全部内容,以及套接字socket的作用的相关内容,希望能够帮到您 。
- 没签租房合同的押金能退
- 一个人撑得很累的说说,形容一个人惰性的句子
- 合浦县美食,合浦最出名特产的是什么
- 驾驶证长期是不是就是终身的
- 橡皮的组成材料是什么,橡皮擦能擦掉铅笔字的原理它的成分是什么
- 法治思维的基本内容是什么
- 发奋识遍天下字的下一句是什么,发奋识遍天下字下面一句是什么
- 西瓜汁的做法
- 梦是怎么形成的 梦是如何形成的
- 汉寿县美食,常德哪里的美食最多