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)的更多相关文章

  1. UNIX网络编程——TCP带外数据小结

    带外数据概念实际上时向接收端传送三个不同的信息:(1)发送端进入紧急模式这个事实.接收进程得以通知这个事实的手段不外乎SIGURG信号或select调用.本通知在发送进程发送带外字节后由发送端TCP立 ...

  2. C#网络编程TCP通信实例程序简单设计

    C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...

  3. Socket网络编程(TCP/IP/端口/类)和实例

    Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...

  4. 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法

    网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) ​ 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...

  5. Socket网络编程-TCP编程

    Socket网络编程-TCP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.socket介绍 1>.TCP/IP协议 2>.跨网络的主机间通讯 在建立通信连接的 ...

  6. 32.网络编程TCP/UDP服务

    网络编程TCP: 服务器端口了解: port:0~65535 web服务:80 邮箱服务:556 0~1024:为服务默认的公认端口,一般我们不能用 套接字:socket socket作用 ip:po ...

  7. 网络编程TCP/IP详解

    网络编程TCP/IP详解 1. 网络通信 中继器:信号放大器 集线器(hub):是中继器的一种形式,区别在于集线器能够提供多端口服务,多口中继器,每个数据包的发送都是以广播的形式进行的,容易阻塞网络. ...

  8. 网络编程TCP协议-聊天室

    网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...

  9. GO语言练习:网络编程 TCP 示例

    1.代码 2.编译及运行 1.网络编程 TCP 示例 simplehttp.go 代码 package main import ( "net" "os" &qu ...

随机推荐

  1. 连接gitlab

    https://www.cnblogs.com/mengyu/p/7761340.html 一.PyCharm配置Git的环境 1.PyCharm 连接Git首先需要本机安装Git软件; 2.PyCh ...

  2. linux 最大文件打开数

    配置文件 vim /etc/security/limits.conf   # /etc/security/limits.conf##This file sets the resource limits ...

  3. 【08】Python itsdangerous、sys.argv、glob、异常处理

    1.itsdangerous 第三方模块. 一般情况下,用户登录时,根据密码(有时候加盐)等生成token,和id一起-->存入redis: 用户再次访问时(比如说支付时),请求中带着id和to ...

  4. Gym-100923A-Por Costel and Azerah(DP)

    链接: https://vjudge.net/problem/Gym-100923A 题意: Por Costel the Pig has received a royal invitation to ...

  5. time时间库使用示例

    time时间库主要有以下几个方法 1. 生成struct_time ,然后就可以很方便的获取到年月日,时分秒等信息 time.localtime() 2. 生成时间戳 time.time() 3. 将 ...

  6. JSP如何实现文件断点上传和断点下载?

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  7. 在Sublime Text 3中配置Python3的开发环境/Build System

    本文来源:https://www.cnblogs.com/zhangqinwei/p/6886600.html Sublime Text作为一款支持多种编程语言的文本编辑神器,深受广大开发者的喜爱.通 ...

  8. 微信小程序登录 code 40029 天坑

    微信登录时 code 大坑(服务端返回如下代码) {"errcode":40029,"errmsg":"invalid code, hints: [ ...

  9. 从零开始,编写简单的课程信息管理系统(使用jsp+servlet+javabean架构)

    一.相关的软件下载和环境配置 1.下载并配置JDK. 2.下载eclipse. 3.下载并配置apache-tomcat(服务器). 4.下载MySQL(数据库). 5.下载Navicat for M ...

  10. sqli-labs(33)

    0X01构造闭合 发现‘ 被过滤了 那么 宽字节绕过 ?id=-%df%%20union%20,database(),%