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.

 

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

目录
相关文章
|
3月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
154 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
15天前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
95 12
|
28天前
|
安全 Java 容器
【JaveEE】——多线程中使用顺序表,队列,哈希表
多线程环境下使用ArrayList(同步机制,写时拷贝),使用队列,哈希表(高频)ConcurrentHashMap(缩小锁粒度,CAS,扩容优化)
|
2月前
|
缓存 安全 C++
C++无锁队列:解锁多线程编程新境界
【10月更文挑战第27天】
129 7
|
3月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
377 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
2月前
|
消息中间件 存储 安全
|
3月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
83 2
|
3月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
108 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
3月前
|
存储 运维 API
源码解密协程队列和线程队列的实现原理(一)
源码解密协程队列和线程队列的实现原理(一)
54 1
|
3月前
|
存储 安全 API
源码解密协程队列和线程队列的实现原理(二)
源码解密协程队列和线程队列的实现原理(二)
42 1

热门文章

最新文章