阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Socket通信概述

269次阅读
没有评论

共计 2318 个字符,预计需要花费 6 分钟才能阅读完成。

导读 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket。
建立网络通信连接至少要一对端口号 (socket)。socket 本质是编程接口 (API),对 TCP/IP 的封装,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 Socket 编程接口;HTTP 是轿车,提供了封装或者显示数据的具体形式;Socket 是发动机,提供了网络通信的能力。

socket 通信方式是进程通信的一种, 先列举一下进程通信的种类:
1)管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用。进程的 亲缘关系通常是指父子进程关系。
2)有名管道(FIFO):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进 先出的通信方式。
3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程 正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手 段。
4)消息队列:消息队列是有消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息 少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5)信号 (sinal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
6)共享内存 (shared memory) 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。
共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制 如信号量,配合使用,来实现进程间的同步和通信。
7)套接字 (socket):套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程 通信。

对于 socket 来说可以用于不同机器间的进程通信, 一般情况下使用 socket 比较多,常见的接口有 socket、bind、listen、connect、accept、send、recv、close. 这里不对具体函数的处理进行细说, 只对某些细节进行描述。

1: 对于服务端来函数调用的顺序是 socket –> bind –> listen ->accept

首先使用 socket 函数创建一个 socket 描述符, 创建后可以使用 setsockopt 设置 socket 选项,
常见选项:
SO_REUSEPORT
设置这个选项可以重复使用端口号, 例如如果 TCP 连接处于 TIME_WAIT 状态, 则在 2MSL 时间内无法重复使用这个端口 这样如果现在有服务器尝试 bind 这个端口就会失败, 使用这个选项就可以解决这个问题.
TCP_NODELAY
关闭 TCP 的 Nagle, 缺省情况下 Nagle 算法是使能的.

2: 使用 listen 函数来侦听 socket 上的连接请求, 函数原型是:

int listern(int sockfd ,int backlog)
其中的第二个参数 backlog 的作用是指定侦听 socket 最大未完成的连接个数,对于 INET 的 TCP 来说,server 收到 来自客户端的连接请求后,为该连接请求新创建一个 SOCKET,并且把该 SOCKET 放到接收连接的队列中;当连接建 立后,把新创建的 SOCKET 从接收队列中清除。如果在某种情况下应用层来不及调用 accept() 接收连接,而此时有 很多客户端在向 server 发起连接,就可能使 server 端接收连接队列无限增长,为防止这种情况,在 listen 函数中 指定对 server 端的 SOCKET 的接收队列长度的限制。默认值为 128,设置大于 128 时实际取值 128。如果 server 端的 接收连接的 socket 接收队列超过 backLog 的值,则新的连接请求被拒绝。

3: 消息发送接收函数

TCP 用 send 和 recv:这是因为每个 TCP 都有一个连接,每次连接完成后,都会把连接的信息记录在 socket 中,这 样每次收发数据都知道对方和自己的 IP 地址还有端口号,无需再次指定。记录是发生在 accept 和 connect 调用完 成后。
1)connect 调用因为只有一个 socket 连接,就记录在本地。
2)而对于 accept 由于有多个连接,所以 accept 会返回一个 socket 对象,对应一个 TCP 连接,记录对应的 IP 和端口

UDP 利用 sendto() 和 recvfrom()
1)recvfrom 会返回发送端的地址,这样对服务器来说,由于是 UDP socket 对象没有记录对应的 IP 和端口信息,会需要使用用到改地址给客户端带来响应。
对于客户端,由于每次始终是知道服务器 IP 地址和端口(和一个服务器交互),所以无需记录(除非 UDP 客户端 需要和多个服务器交互,需要一一记录,才能确保交互正确)
2)sendto
由于没有记录 IP 和端口在 socket 对象中,所以每次都需要指定接受方地址,无论是客户端和服务器都需要用

4:socket 与 epoll 结合使用

在进程通信中, 经常使用 socket 与 epoll 相结合的方式处理连接请求和消息发送,首先服务器创建 socket 描述符, 使用 bind 绑定指定端口, 并发起监听, 然后将 socket 描述符放到 epoll 中, 这样客户端的连接请求就可以由 epoll 来 通知 socket 服务端, 如果有客户端的连接请求后, 使用 accept 函数创建新的描述符, 并将这个新的描述符放入 epoll 中这个新的 socket 描述符是用来监听客户端发来的消息的, 如果有消息可读, 那么就可以死循环使用 recv 函数读取 消息, 直到数据读完。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2318字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7800225
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...