IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Linux:tcp socket编程 -> 正文阅读

[网络协议]Linux:tcp socket编程

编程流程

对于服务端

  1. 创建流式套接字
  2. 绑定地址信息
  3. 监听
  4. 接收新连接:
    从内核中将已经完成三次握手的连接,接收回来一次接收一个
  5. 调用close

对于客户端

  1. 创建流式套接字
  2. 不推荐绑定地址信息
  3. 发起连接
  4. 调用close

在这里插入图片描述

  • 监听的作用是告诉操作系统内核可以接收客户端发起的新连接了;
  • 当服务端调用监听接口后,服务端和客户端就进行三次握手(三次握手在内核中完成,与程序员无关,服务端也不需要调用accept函数);
  • 三次握手完毕,双方建立连接,将该连接放入一个已完成队列中,服务端调用accept函数将该连接从已完成连接队列中拿出,产生新连接套接字在这里插入图片描述

TCP的发送和接收缓冲区

  • 创建套接字后,就会有TCP的发送缓冲区和接收缓冲区;
  • 在服务端发起新连接后,经三次握手,两端建立连接;
  • 此时程序员调用accept函数,就会在服务端创建一个专用套接字,专门服务客户端;
  • 原服务端套接字就在不断接收连接,将其称为 侦听套接字

多个服务端也会先和侦听套接字建立连接,服务端再调用accep函数创建新套接字

接口函数

1.socket函数
2.bind函数

3.listen,监听函数在这里插入图片描述

  • backlog是同一时刻,服务端能处理的连接数上限
  • 能和服务端建立连接的数量=backlog+1

4.connect,客户端连接函数
在这里插入图片描述

5.accept,服务端接收函数
在这里插入图片描述 当调用accept函数接收新连接的时候,如果已完成连接队列中没有新连接,则assept函数阻塞

6.send与recv,双方通信,发送与接收函数在这里插入图片描述

  • 对于recv函数,如果接收缓冲区中没有数据,调用recv去接收数据时函数会阻塞;
  • 如果将新连接套接字设置成非阻塞熟悉,则调用recv函数时,即使接收缓冲区中没有数据,该函数也会返回
  • 返回值的表现不是正常返回,而是出错返回

函数使用:

在这里插入图片描述

  • accept是一个阻塞函数,是从内核中的已完成连接队列中,接收三次握手完成的连接;
  • 调用accept后,如果已完成连接队列中没有三次握手的连接,函数就会阻塞;
  • 将accept放入while循环中,每一次循环都是想接收一个新的连接,没有新连接函数就会阻塞;

  • 将accept函数放在循环外确实可以解决再次阻塞问题,再来一个客户端,新客户端无法与服务端交流
  • 新客户端确实连接上了服务端(三次握手连接已经建立),但是服务端没有调用accept函数

只能通过多线程解决

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 12:13:42  更:2021-08-27 12:14:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:15:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码