2017-04-19 2 views
0

Je dois effectuer un test important. L'état du test est comme ci-dessous. J'utilise winsock et j'ai 2 sockets UDP (Sock-A et Sock-B) qui avec l'option SO_REUSEADDR les deux ont été liés au port 1000 sur un PC. Les deux transmettent les paquets UDP à un autre socket (Sock-C) et Sock-C qui se trouve dans différents LAN reçoit leurs messages. Sock-C leur répond avec quelques messages, mais malheureusement, je peux voir juste Sock-A (qui a été ouvert plus tôt) reçoit juste les messages, et Sock-B ne reçoit rien. Quand je ferme la Chaussette-A, je peux voir que la Chaussette-B commence à recevoir les messages.Sockets UDP à port lié identique et réception des données sur chacun d'entre eux

L'un d'entre vous sait ce que je dois faire pour que les lecteurs Sock-A et Sock-B puissent recevoir des messages de Sock-C?

Merci ~

+0

SO_REUSEADDR est-il disponible dans WinSock? Vérifiez-vous la valeur de retour de setsockopt? https://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85).aspx – Neil

+0

Pourquoi utilisez-vous le même port - http://xyproblem.info/? –

+0

Oui, il est possible de lier le même port à deux sockets différentes avec l'option SO_REUSEADDR. –

Répondre

0

Ceci est un comportement normal. Je pense que cela ne peut pas être fait avec 2 prises d'écoute sur le même port. Pourquoi avez-vous relié 2 prises au même port?

Lire Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?

Dans linux il va même essayer de distribuer les datagrammes à parts égales entre les 2 prises, de sorte que son aléatoire. Vous devrez changer la façon dont vous envoyez/recevez des paquets.

+0

Lorsque deux sockets UDP sont liés au même port et qu'un paquet unicast entrant est reçu sur ce port, il sera remis à l'un des deux prises (choisies arbitrairement). Si le paquet entrant est un paquet UDP multicast, OTOH, il sera remis à chaque socket lié au port. (Ce dernier comportement est nécessaire pour permettre à plusieurs programmes sur le même hôte d'écouter simultanément le même groupe de multidiffusion) –

+0

bon point. Je ne l'ai pas inclus car op n'a pas mentionné l'utilisation de la multidiffusion. – rinn2883

+0

Merci les gars, Alors, comment puis-je faire face à ce problème? Puisque j'envoie des paquets via Internet, puis-je les envoyer en mode multicast? –