如何创建一个 "event" 系统来接收数据包

How to create an "event" system for recieving packets

所以我一直在使用 C++ 编写一些不同的网络程序,但遇到了一个问题。我为此使用 Winsock(版本 2),不知道这是否是最好的使用方式,但无论如何。所以在 winsock 中有一个接收数据包的函数(实际上是 2 个函数),它所做的是等待直到它收到一个数据包然后继续运行,在等待数据包时冻结程序。我认为我需要的是某种 "event" 系统,其中有一个函数,每次数据包进入时都会调用该函数,程序在等待数据包时保持 运行。

所以基本上现在如果我只想打印我收到的 (tcp) 数据包,我有这个(首先是一些启动代码并创建套接字和东西):

char buffer[4096];

while(true){

    ZeroMemory(buffer, 4096);

    recv(clientSocket, buffer, 4096, 0); //Program freezes until it receives something

    std::cout << buffer << std::endl;

}

但是,如果我有一个 window 想要在等待数据包时继续更新怎么办?该程序即将冻结。

WinSock 为非阻塞套接字操作提供了几种事件驱动模型: