J'apprends les sockets. J'écris un serveur UDP simple, à travers lequel de petits messages sont envoyés. Tous les clients actifs envoient des messages "keepalive" toutes les trois minutes afin que le serveur puisse voir quels clients sont en ligne.С ++ - Serveur UDP avec plusieurs clients
Ces messages sont reçus dans le flux
fonction Stream:
void keepAlive(SOCKET udp)
{
int len=0;
while(true)
{
int len=recvfrom(udp,requestBuffer,maxMessage,0,(sockaddr*)&cliAddr,&cliAddrSize)
// Actions with the received message
}
}
Mais comment mettre en œuvre, par exemple, la transmission de messages à tous les clients ou un particulier, si la prise est déjà "occupé". Besoin de créer un nouveau socket pour envoyer des messages? (Sur le serveur et sur le client)? Et si les clients sont derrière NAT?
La même question est aussi du côté du client (parce que keepalive est sortie au fil, mais pour résoudre ce problème, l'autre est résolu aussi)
Je ne veux pas envoyer de réponse tout de suite. Je veux le faire à tout moment, mais mon socket sera occupé en attente de keep-alive. –
Sur le serveur, si vous ne souhaitez pas bloquer le recvfrom, vous pouvez créer un autre thread pour traiter l'événement ou le message que vous avez reçu. Dans les autres fils, vous pouvez décider d'envoyer à tout moment. – user8380302