私はソケットを学んでいます。私は小さなメッセージが送信される単純なUDPサーバーを作成しています。すべてのアクティブなクライアントは3分ごとに "キープアライブ"メッセージを送信し、サーバーがどのクライアントがオンラインであるかを確認できるようにします。С++ - 複数のクライアントを持つUDPサーバ
void keepAlive(SOCKET udp)
{
int len=0;
while(true)
{
int len=recvfrom(udp,requestBuffer,maxMessage,0,(sockaddr*)&cliAddr,&cliAddrSize)
// Actions with the received message
}
}
しかし、実装する方法、例えば、すべてのクライアントまたは特定のものへのメッセージの送信は、ソケットがすでにある場合:
これらのメッセージは、
流れ関数は、ストリームで受信されています"忙しい"。メッセージを送信するために新しいソケットを作成する必要がありますか? (サーバーとクライアントで)?クライアントがNATの後ろにいる場合は?
同じ質問(キープアライブがスレッドに取り出されるが、この問題を解決する際に、他のはあまりにも解決されているため)、クライアントの側にもある
すぐに回答を送ってほしくないです。私はこれをいつでもやりたいですが、私のソケットはキープアライブを待って忙しいです。 –
サーバーで、recvfromをブロックしない場合は、イベントを処理する別のスレッドを作成するか、recvメッセージを作成することができます。他のスレッドでは、いつでも送信することができます。 – user8380302