网络编程.TCP分块接收数据(AIO)(IOCP)
1、前提:每次投递的接收缓冲区 在它返回后 就不再用它进行2次投递了
于是 接收缓冲区 在返回的时候,数据都是 从接收缓冲区的偏移[0]处开始填充的,且 接收缓冲区 可能被填满 也可能未被填满。
1.1、
假设 现在 接收到的 TCP数据块 已经是正确的顺序了(不管用何种手段,反正是保证了这个前提了)
假设 缓冲区长度为 1024
来了一个 TCP数据(长度为) 3000
(不管什么原因:可能是 发送机 较忙、网络较拥堵、交换机较忙)
可能接收的数据是这样的:(接收到的每一块数据 或 其中的某几个[尤其是 非末尾的]数据块 并未填满整个接收缓冲区)
第1块数据长度为:500
第2块数据长度为:500
第3块数据长度为:500
第4块数据长度为:500
第5块数据长度为:500
第6块数据长度为:500
貌似 我实验的过程中 遇到过这个现象
其它可能的情况:
一个接收缓冲区中,包含 多个完整的TCP数据包
一个接收缓冲区中,包含 若干个完整的TCP数据包 + 最多2个不完整TCP数据包
2、
3、
4、
5、
网络编程.TCP分块接收数据(AIO)(IOCP)的更多相关文章
- UNIX网络编程——TCP带外数据小结
带外数据概念实际上时向接收端传送三个不同的信息:(1)发送端进入紧急模式这个事实.接收进程得以通知这个事实的手段不外乎SIGURG信号或select调用.本通知在发送进程发送带外字节后由发送端TCP立 ...
- C#网络编程TCP通信实例程序简单设计
C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...
- Socket网络编程(TCP/IP/端口/类)和实例
Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- Socket网络编程-TCP编程
Socket网络编程-TCP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.socket介绍 1>.TCP/IP协议 2>.跨网络的主机间通讯 在建立通信连接的 ...
- 32.网络编程TCP/UDP服务
网络编程TCP: 服务器端口了解: port:0~65535 web服务:80 邮箱服务:556 0~1024:为服务默认的公认端口,一般我们不能用 套接字:socket socket作用 ip:po ...
- 网络编程TCP/IP详解
网络编程TCP/IP详解 1. 网络通信 中继器:信号放大器 集线器(hub):是中继器的一种形式,区别在于集线器能够提供多端口服务,多口中继器,每个数据包的发送都是以广播的形式进行的,容易阻塞网络. ...
- 网络编程TCP协议-聊天室
网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...
- GO语言练习:网络编程 TCP 示例
1.代码 2.编译及运行 1.网络编程 TCP 示例 simplehttp.go 代码 package main import ( "net" "os" &qu ...
随机推荐
- windows2008r2防火墙设置一例
有台dell R420服务器,系统windows2008r2 扫描出安全漏洞,按照默认开启防火墙,结果远程桌面上不去了,远程桌面端口号是10086,需要在 控制面板\所有控制面板项\Windows 防 ...
- postgresql查询栅格数据范围(extent)
栅格数据: SELECT ST_Extent(rast::geometry) as bextent FROM tmean_19; 矢量数据: SELECT ST_Extent(way) as bext ...
- 【织梦手机端仿站】和PC一个后台
卸载插件,织梦默认带手机站,无需复杂使用插件以后不方便升级.织梦2015年6月8日更新后,就添加了很多针对手机移动端的设计,最大的设计就是添加了生成二维码的织梦标签和织梦手机模板功能,织梦更新后,默认 ...
- HTML5测试(二)
HTML5测试(四) 1.input 元素中,下列哪个类型属性定义了输入电话号码的控件? A.mob B.tel C.mobile D.telephone 答案:B 具有 type 属性的 input ...
- mven pom.xml Overriding managed version 问题解决详解
问题原因:在于默认的parent中的版本springboot有固定的指定 删除指定版本 <dependency> <groupId>junit</groupId> ...
- Django之nginx+wsgi后台部署(最新版)
0-部署准备 1.要使用安全组打开腾讯云的80端口 腾讯云的80端口不能访问www.jianshu.com 以实际项目部署为例 项目名称api_learn: Python版本:python 3.6. ...
- 微信点餐系统(七)-微信授权获取openid:
章节小结: 1.学会了微信授权的步骤,学会了微信授权的文档 2.学会了使用natapp内网穿透工具 3.加深了虚拟机的网络配置以及基本使用 4.学会了抓包购票工具fiddler的使用 5.微信授权步骤 ...
- php 配置优化
调整php内存限制 vim /usr/local/php/php.ini memory_limit = 1024M 内存优化 /usr/local/php/etc/php-fpm.conf https ...
- jdbcTemplate进行CRUD,查询结果转json
通过Spring的jdbcTemplate作为dao层的框架,将获取到的字段名,及其值,通过put放在jsonObject或jsonArray中,将json返回. public class Sprin ...
- vue 路由懒加载 resolve vue-router配置
使用方法 component:resolve => require(['@/pages/About'],resolve) //"@"相当于".." 懒加载 ...