Delphi-IOCP学习笔记<五>===测试IOCP工作线程处理队列顺序

简介: 现在IOCP可以接收到数据了。   >>>>>>>>>其实IOCP的队列是先进先出的,经过测试,看来是我记错了!!!! >>>>2013年4月20日 16:22:46     >>>>>引用 TCP数据粘包的产生原因在于TCP是一种流协议。

现在IOCP可以接收到数据了。

 

>>>>>>>>>其实IOCP的队列是先进先出的,经过测试,看来是我记错了!!!!

>>>>2013年4月20日 16:22:46

 

 

>>>>>引用

TCP数据粘包的产生原因在于TCP是一种流协议。在以太网中一个TCP的数据包长度是1500位。其中20位的IP包头,20位的TCP包头,其余的1460都是我们可以发送的数据

>>>>>><http://fxh7622.blog.51cto.com/63841/15578>

 

我在想如果客户端发送的数据如果比较小,会引起粘包的问题。粘包可以和客户端合订协议,可以解决,需要和客户端一起解决的问题,我想不应该放在IOCP的底层通信来实现!

如果是客户端发送的数据过大呢,客户端是不是会分拆包来进行发送呢!

IOCP的队列是 后进先出的模式,那会不会后面发送的包会被在前面接收到呢?

我需要构思一下,怎么样来做这样的测试。

 

 

 

2013年4月20日 11:03:13

刚刚做了下测试,还是用了之前的例子

1.我首先把工作线程调成了一个

lvCount := 1;

  //ServerWorkerThread 是工作线程
  for I:=1 to lvCount do
  begin
     lvWorkerData := AllocMem(SizeOf(TWorkerData));
     lvWorkerData.IOCPHandle := lvIOPort;
     lvWorkerData.WorkerID := i;
     hThread := CreateThread(nil, 0, @ServerWorkerThread,
       lvWorkerData,0, dwThreadId);
     if (hThread = 0) then
     begin
         Exit;
     end;
     CloseHandle(hThread);
  end;

 

 

2.服务端单独运行在,GetQueuedCompletionStatus,下断点,先不要执行。

image

 

3.单独运行客户端

先创建连接,然后连续发送3次1024字节的字符。

 

结果

  然后回到服务端调试。第一次取出来的字符,是客户端第一次发送过来的字符。。。顺序是对的

难道不是后进先出。有时间向楠楠和fxh求证下。

 

 

第二次测试

开两个客户端。同样服务端只开一个工作线程。

先在第一个客户端,发送1024个a,1024个b,1024个c

再第二个客户端,发送1024个1,1024个2,1024个3

回到服务端调试时,发现第一次收到的是a,第二次收到的是1,后面依次收到,b.

 

可以看出同一个套件字的接收到的顺序是和发送的顺序是一致的,这样的话,我们可以每个套接字分配一个内存。将收到的数据按照套接字写入到这个内存中,就可以了。

目录
相关文章
|
Web App开发 JavaScript 前端开发
NB-loT 之通过 Iwm2m 服务器测试 Coap 协议报文 | 学习笔记
快速学习 NB-loT 之通过 Iwm2m 服务器测试 Coap 协议报文
404 0
NB-loT 之通过 Iwm2m 服务器测试 Coap 协议报文 | 学习笔记
|
2月前
|
Java 测试技术 编译器
JMM测试利器-JCStress学习笔记
JMM测试利器-JCStress学习笔记
|
4月前
|
Ubuntu 应用服务中间件 测试技术
dpdk预备学习环境准备之多队列网卡认识及测试
dpdk预备学习环境准备之多队列网卡认识及测试
84 1
|
8月前
java202303java学习笔记第四十六天-请求-postman接口测试
java202303java学习笔记第四十六天-请求-postman接口测试
54 0
|
11月前
|
测试技术
java202304java学习笔记第六十天-ssm-spring配置文件-完善测试环境
java202304java学习笔记第六十天-ssm-spring配置文件-完善测试环境
52 0
|
C# C++ 索引
用C#构造一个队列Queue。要求此队列是循环队列,并进行入队、出队的测试。
用C#构造一个队列Queue。要求此队列是循环队列,并进行入队、出队的测试。
157 0
用C#构造一个队列Queue。要求此队列是循环队列,并进行入队、出队的测试。
|
关系型数据库 OLAP API
测试 API|学习笔记
快速学习测试 API
117 0
测试 API|学习笔记
|
存储 SQL 监控
PolarDB-X 进行 TP 负载测试(三)| 学习笔记
快速学习 PolarDB-X 进行 TP 负载测试。
300 0
PolarDB-X 进行 TP 负载测试(三)| 学习笔记
|
存储
数组模拟队列(测试样例,含源码分析)
数组模拟队列(测试样例,含源码分析)
94 0
数组模拟队列(测试样例,含源码分析)
|
SQL 存储 关系型数据库
PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换|学习笔记
快速学习PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换
723 0
PostgreSQL 流复制搭建主从环境,同步和异步的解释,压力测试,主从角色切换|学习笔记