J'écris un programme simple client-serveur.comment différencier si le client utilise TCP ou UDP du côté serveur
Le client envoie des messages au serveur en utilisant UDP ou TCP. Le serveur doit pouvoir supporter à la fois UDP et TCP.
Si le client envoie un message en utilisant UDP, la séquence d'appels de méthode dans le client est socket(),bind(),sendto(),recvfrom(),close()
et celle du serveur est socket(),bind(),sendto(),recvfrom(),close()
. S'il utilise TCP, séquence d'appel dans le serveur est socket(),bind(),listen(),accept(),send(),recv(),close()
. et que le client est socket(),bind(),connect(),send(),recv(),close()
Dans mon programme, l'utilisateur/client est donné le choix au début de choisir ce qu'il veut utiliser UDP ou TCP. Donc, mon principal problème est comment puis-je savoir ou différencier dans le côté serveur, si le client envoie un message en utilisant TCP ou UDP. S'il utilise TCP, je dois appeler listen(), accepter(), send(), recv() et s'il utilise UDP, je n'appelle pas listen(), n'accepte pas() mais appelle sendto() et recvfrom (). Donc, comment puis-je différencier/savoir ceci au début afin que je puisse faire des appels de fonction appropriés.
Merci.
Donc, devrais-je créer deux sockets côté serveur, une pour UDP et une autre pour TCP? –
seg.server.fault, oui. –
@ seg.server.fault: Je recommanderais _not_ calling 'bind()' dans votre code client. Bien que cela soit techniquement possible (et requis dans des situations très spécifiques), le comportement par défaut sans un côté client 'bind()' est généralement ce que vous voulez dans la couche application. De plus, gardez à l'esprit que vous pouvez appeler 'connect()' sur un socket UDP. Il ne fait aucun handshaking, mais cela signifie que vous pouvez utiliser 'send/recv' au lieu de' sendto/recvfrom', ce qui peut rendre la logique du client plus simple. – Tom