【发布时间】:2019-10-21 17:01:26
【问题描述】:
所以我一直在用 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;
}
但是,如果我有一个窗口要在等待数据包时不断更新呢?程序即将冻结。
【问题讨论】:
-
一个单独的线程等待数据包怎么样?
-
你想看看
select()。这个函数允许你在不阻塞线程的情况下检查一个或多个套接字是否需要注意。
标签: c++ networking winsock winsock2