如何创建用于接收数据包的“事件”系统

时间:2019-10-21 17:01:26

标签: c++ networking winsock winsock2

所以我一直在研究c ++中的一些不同的网络程序,但遇到了一个问题。我为此使用Winsock(版本2),不知道这是否是最好的选择,但无论如何。因此,在winsock中,有一个接收数据包的功能(实际上是2个功能),它的作用是等待直到得到数据包,然后继续运行,在等待数据包时冻结程序。我想我需要的是一种“事件”系统,其中有一个函数在每次进入数据包时都会被调用,并且程序在等待数据包的同时保持运行。

所以基本上现在,如果我只想打印我收到的(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;

}

但是,如果我有一个窗口想在等待数据包时不断更新怎么办?该程序将被冻结。

1 个答案:

答案 0 :(得分:2)

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