【发布时间】:2013-08-09 18:38:11
【问题描述】:
我正在尝试创建一个 UDP 广播程序来检查本地游戏服务器,但我在接收端遇到了一些问题。由于活动服务器的数量在任何时候都是未知的,因此您必须有一个只有在您停止它时才会退出的循环。所以在这段代码中:
while(1) // start a while loop
{
if(recvfrom(sd,buff,BUFFSZ,0,(struct sockaddr *)&peer,&psz) < 0) // recvfrom() function call
{
cout << red << "Fatal: Failed to receive data" << white << endl;
return;
}
else
{
cout << green << "Found Server :: " << white;
cout << yellow << inet_ntoa(peer.sin_addr), htons(peer.sin_port);
cout << endl;
}
}
我希望在按下 Ctrl + C 之前运行这个 recvfrom() 函数。我已经尝试设置处理程序等(来自相关问题),但它们要么对我来说太复杂,要么是一个简单的函数只是作为演示退出程序。这是我的问题: 该程序挂在 recvfrom 上,直到它收到一个连接(我的猜测),所以,它永远没有机会专门等待输入。我怎样才能设置一个可以很好地工作的事件?
谢谢!
【问题讨论】:
-
我通过stackoverflow.com/questions/17766550/…>找到了解决方案
标签: c++ sockets while-loop