2010-09-29 11 views
0

Salut Je suis l'application P2P de chat où le serveur servira de médiateur pour l'échange IP et le port de connexion homologue. Je reçois l'erreur WSAEAFNOSUPPORT 10047.erreur WSAEAFNOSUPPORT

j'ai créé UDP socket

sockfd = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP); puis liant le à l'adresse IP locale et au port.

if (bind (sockfd, (struct sockaddr *) & localaddr, sizeof (localaddr)) < 0) { Error_Code ("create_socket: bind()"); return -1; }

puis je contacte le serveur.

// connexion avec le serveur

sendto (sockfd, pBuffer, sizeof (nMessageType), 0, (* const sockaddr) & config.serverAddr, taille);

serveur conserve la trace de l'autre peer.once connecté se connecte au serveur, il retourne IP et le port de l'autre peer.so un pair peut utiliser IP et le port pour se connecter directement à d'autres pairs. mais je reçois une erreur lors de l'envoi des données à d'autres pairs à

// envoi de données to peer

int ret = sendto (sockfd, sendbuf, sizeof (nMessagetype), 0, (const sockaddr *) & m_peer.publicaddr, sockAddLen); il renvoie l'erreur 10047 WSAEAFNOSUPPORT.

Ici, j'utilise le même socket pour contacter le serveur et d'autres pairs est-ce la raison pour cela? Je ne comprends pas ce qui ne va pas ici. Il est capable de se connecter correctement au serveur mais il ne parvient pas à se connecter à un autre pair.

+0

Avez-vous résolu le problème? Avez-vous eu l'occasion de vérifier que les deux familles sont les mêmes? – Default

Répondre

1

Pointu dans le sendto et le message d'erreur réelle WSAEAFNOSUPPORT l'adresse que vous utilisez pour envoyer à n'est pas de la même famille que la prise que vous envoyez sur. Vous devez vous assurer que l'adresse m_peer.publicaddr est de la même famille que sockfd. Par exemple, si vous envoyez une adresse pour IPv6, AF_INET ne fonctionnera pas (il faudrait que ce soit AF_INET6)