| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> socket套接字中的缓冲区 -> 正文阅读 |
|
[网络协议]socket套接字中的缓冲区 |
TCP套接字的数据收发无边界。服务器端即使调用1次write函数传输40字节的数
如上图
所示,调用
write
函数时 数据将移到输出缓冲,在适当的时候(不管是分别传送还
次性传送)传向对方的输入缓冲
这时对方将调用
read
函数从输入缓冲读取数据
这些
1/0
缓冲特性可整理
如下:
1/0
冲在每个
TCP
套接字中单独存在;
缓冲在
创建
套接字
自动生成;
口即使
关闭套接字也会继续传递输出缓冲
中遗留的数据;
关闭套接字将丢失输入缓冲中的数据;
那么,下面这种情况会引发什么事情?理解了
νo
缓冲后,各位应该可以猜出其流程:
"客户端输入缓冲为
50
字节,而服务器端传输了
100
字节。
可以提出如下解决方案:
. "填满输入缓冲前迅速调用read函数读取数据,这样会腾出一部分空间,问题就解 决了。" 当然,这只是我的一个小玩笑,相信大家不会当真,那么马上给出结论: "不会发生超过输入缓冲大小的数据传输。" 也就是说,根本不会发生这类问题,因为TCP会控制数据流。TCP中有滑动窗口( Sliding Window) 协议,用对话方式呈现如下。 口套接字A:"你好,最多可以向我传递50字节。" 口套接字B: "OK!" 口套接字A: "我腾出了20字节的空间,最多可以收70 字节。" 口套接字B: "OK!" 数据收发也是如此,因此TCP中不会因为缓冲溢出而丢失数据。
socket中write
函数返回的时间点:
write
函数和
Windows
send
函数并不会在完成向对方主机的数据传输时
返回,而是在数据移到输出缓冲时。但
TCP
会保证对输出缓冲数据的传输,
所以说
write
函数在数据传输完成时返回。要准确理解这句话。
TCP数据传输中不存在边界,这表示"数据传输过程中调用I/O函数的次数不具有任何意义。"
相反‘ UDP是具有数据边界的协议,传输中调用I/O函数的次数非常重要。因此,输入函数 的调用次数应和输出函数的调用次数完全一致,这样才能保证接收全部已发送数据。例如,调用 3次输出函数发送的数据必须通过调用3次输入函数才能接收完。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 9:31:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |