我想實現簡單的網絡遊戲(客戶端 - 服務器),它使用UDP在網絡上傳輸的遊戲事件,我有這樣的運作良好,但現在我想添加到遊戲中的聊天在同一控制檯應用程序TCP。我試圖使用select()
和非阻塞主套接字來實現多客戶端聊天。聊天工作作爲獨立的應用程序,但我有問題把它放在一起。非阻塞選擇()?
基本上我的服務器循環是這樣的:
while(true)
{
sendUDPdata()
...
while(true)
{
receiveUDPdata()
}
}
問題是,當我想聊天添加到服務器的主循環(處理UDP)是這樣的:
while(true)
{
HandleTCPConnections();
sendUDPdata();
...
while(true)
{
receiveUDPdata();
}
}
在HandleTCPConnections()
調用select()
阻止整個服務器。有沒有辦法如何處理這個問題?
'選擇()'有一個超時。您可以使用0秒的超時輪詢所請求的套接字並立即退出而不會阻塞。 –
@RemyLebeau但是他做了什麼?他不能只是再次調用'select'。 –
@DavidSchwartz爲什麼不呢?他可以在一個循環中調用'select()',同時請求TCP和UDP套接字。如果TCP套接字報告它有數據等待,請閱讀它。如果UDP套接字報告它有數據等待,請閱讀它。 'select()'的主要設計之一是在單個線程中處理多個套接字的I/O。 –