我实现一个客户机/服务器对,通过TCP / IP套接字commnicating,使用重叠IO在Windows完成例程。 调试正在两个的VirtualBox虚拟机(客户端于一体,在另一台服务器)来完成。 CPU是四核。
在客户端上的操作顺序基本是:
- 发出的WSARecv调用(将无法完成作为尚未)。
- 问题与分组WSASend调用。 服务器将通过相同的插座发送回复。
- 一旦执行了WSASend调用完成例程的分组放置在等待换应答队列。
- 一旦完成例程的调用的WSARecv执行(从收到服务器应答),代码试图找到与队列中的这个答复包。
- 发出的WSARecv调用(将无法完成作为尚未)。
- 从第二步骤重复。
在服务器上的操作顺序基本是:
- 发出的WSARecv调用(将无法完成作为尚未)。
- 一旦完成例程(从客户端接收的数据包)的呼叫的WSARecv执行,在辅助线程处理的分组。
- 发出的WSARecv调用(将无法完成作为尚未)。
- 一旦次级线程完成的应答被发送到客户端,发出主线程上的WSASend调用。
- 从第二步骤重复。
时遇到的问题是,有时应答客户端上接收,而不必在等待换应答队列相应的分组。 由于调试努力的一部分,我有两个问题:
1)它是可以设想,具有未决的WSARecv呼叫时,的WSARecv的完成例程定于提前完成例程用于对应WSASend(即发送到服务器回答分组)的一者的执行?
2)如果WSASend调用完成后立即仍然安排执行完成例程?
我使用的是WSAWaitForMultipleEvents电话为报警等待功能。