2010-12-09 6 views
2

J'ai un PC et un téléphone et j'essaie de mettre en place une communication bidirectionnelle entre les 2 sur 3G.UDP NAT Traversal

Sur le PC j'ai un contrôle total sur le NAT. J'ai donc mappé les communications entrantes sur mon port spécifique au PC sur mon bureau. Je l'envoie ensuite à l'adresse IP externe de notre réseau PC avec mon port spécifique. Je vois les paquets arriver à mon PC, ce qui est parfait. Alors maintenant je veux renvoyer une communication du PC au téléphone. J'ai l'adresse et le port via un "recvfrom" et je fais ensuite un sendto de retour à l'adresse et le port que j'ai reçu les données.

Toutefois, ces données ne sont pas reçues par le téléphone. Je suppose que la communication entrante n'est pas redirigée par la boîte NAT sur le réseau de fournisseurs de services mobiles.

Pourquoi est-ce? Je pensais voir comme j'ai initié la communication du téléphone que je devrais pouvoir revenir le long de cette route pour communiquer avec le téléphone?

Alors, comment est-ce que cela fonctionne?

Des pensées appréciées!

+0

Vous voudrez peut-être jeter un coup d'œil à [STUN] (http://en.wikipedia.org/wiki/STUN) – Hasturkun

+0

Utilisez-vous le même socket pour 'sendto()' que vous avez utilisé 'recvfrom()'? – caf

+0

Besoin de plus de détails sur la disposition du réseau. Par exemple, et je peux me tromper, il ne semble pas que votre NAT sur la boîte de PC fasse la bonne chose. Les paquets IP sortant un PC via un NAT obtiennent leur adresse IP source mappée à une adresse sur l'interface externe. – sashang

Répondre

0

Eh bien, j'ai compris ce que je faisais mal. Je communiquais du téléphone au port "x" du PC et essayais ensuite de revenir dans l'autre sens sur le port "y". Utiliser le même port pour les deux façons a permis à la communication de se produire :)