千家信息网

什么是socket套接字

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本篇内容介绍了"什么是socket套接字"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!客户端-服务器
千家信息网最后更新 2024年11月23日什么是socket套接字

本篇内容介绍了"什么是socket套接字"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

客户端-服务器模型

互联网已经深入我们生活的方方面面,重要性不言而喻。上世纪70年代互联网刚发明的时候,就确定了客户端-服务器模型,这个编程模型一直沿用到现在都没有变过,我们在电脑上打开一个网站,在微信上聊天,打开一个app本质上都是客户端和服务器的连接和交互。

客户端-服务器模型的操作方式如下:

  1. 客户端需要一个服务的时候,比如需要打开一个网页,它就向服务器发送一个请求。

  2. 服务器收到请求后,会进行适当的处理,比如从数据库读取客户端需要的数据。

  3. 服务器处理好请求后,会按一定的格式返回客户端需要的数据,然后发给客户端一个响应。

  4. 客户端收到服务器的响应后,会处理网页数据,然后再显示器上显示出来,然后客户端再发送请求给服务器,如此循环。


socket 套接字

客户端和服务器是通过什么来连接的呢?是20 世纪 80 年代加州大学伯克利分校提出来的socket套接字,也叫伯克利套接字。socket的工作模式如下图:

服务器socket准备工作:

  1. 初始化socket

  2. 执行bind绑定操作,将服务器的服务绑定在一个ip地址和一个特定的端口上

  3. 执行listen操作,将原先的socket转化为服务端的socket

  4. 执行accept操作,将进程阻塞在accept方法上,等待客户端的连接

客户端初始化一个socket后,可以直接调用connet方法连接服务端的socket,经过著名的TCP三次握手,客户端和服务器建立连接,进入数据传输状态。

客户端发起write写操作,服务器通过read接收数据,然后write到客户端,客户端用read接收数据,当客户端和服务器交互完成之后,客户端发起close操作,发送一个FIN包通知服务器关闭链接。

socket 套接字地址格式

客户端和服务器建立连接的时候,需要知道对方的地址。就像快递小哥要给你送快递就得知道你家住那栋楼,哪个房间一样。互联网世界的ip地址和端口就像哪栋楼几零几一样,能够精确的找到服务器上的某个服务。

我们使用socket的时候就需要对方的ip地址和端口号,socket的地址结构在程序里的表示如下面的图示。

sin_family表示地址的类型,IPv4的值就是AF_INET,IPv6的值就是AF_INET6,程序通过sin_family的类型就可以知道该套接字地址是哪种类型了。

in_port_t表示端口号,我们看到端口号占16位,所以端口号的数量最大支持2的16次方,就是65536个端口,也就是0~65535的范围。因为每次建立连接的时候都需要知道对方的端口号,很多知名的服务就把自己的端口号固定了,叫做保留端口。这样客户端要连接这些服务的时候就知道用哪个端口了,不用每次再去问了,比如:ftp的21端口,ssh的22端口,telnet的23端口,http的80端口。

通用套接字地址格式

IPv4 套接字格式地址

IPv6 套接字地址格式

本地套接字地址格式

几种套接字地址格式比较

通用套接字地址

IPv4套接字格式地址表示IPv4的地址,IPv6套接字格式地址表示IPv6的地址,还有本地地址结构用于本地 socket 通信,还有一个是通用地址结构,为什么要有通用地址结构呢?

原来为了方便函数的的调用,像connect,bind,accept方法都需要一个套接字地址结构的指针参数:

为了方便起见,函数的定义就直接用通用的地址结构指针定义,然后调用的时候再传入具体的地址结构指针,有没有和面向对象编程的多态特性很像?

但是ipv4地址结构的大小为16字节,ipv6地址结构的大小为28字节,本地地址地址结构的大小最多为110字节,而通用地址结构的大小为16字节。除了ipv4地址,其他地址都比通用地址结构大,那么其他地址是如果转换为通用地址的呢?

仔细看一下,这里参数传入的是地址结构的指针哦,后面还有一个*addrlen的参数,表示地址结构的长度,所以只要取addrlen长度的数据就行了,具体的类型可以根据sin_family来确定哦。

"什么是socket套接字"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

地址 服务 客户 客户端 服务器 套接字 结构 格式 端口 数据 时候 口号 大小 字节 指针 模型 类型 互联网 参数 对方 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库中级考试题 unix服务器厂家 河南定制化国产服务器企业 河南省食蚁兽网络技术 爬虫爬取文章并保存数据库 注册数据库驱动类 ftp服务器配置与管理2 企业网络安全分析与研究生 数据库如何避免重复数据 合肥做软件开发工资标准 上传图片到数据库并且展示出来 服务器内存不足无法完成该操作 网络安全项目实训 电子课件 小白测评数据库20款应用 网络安全监测情况分析 服务器导轨怎么拆下 深圳互联网一点科技公司 利辛招游戏软件开发 矿产资源管理和地质数据库 安溪县网络安全大队 存储服务器机箱推荐 软件开发费单位写次还是项 福州灵果网络技术有限公司 将数据存储到另一台服务器上 elastic使用什么数据库 我的世界武灵帝国服务器怎么下载 厦门速昌成网络技术有限公司 服务器导轨怎么拆下 网络安全法规实验心得体会 恢复数据库时的目标时间点
0