2010-12-02 11 views
1

J'ai un problème très ennuyeux. J'ai une application mIRC/Skype, ce qui signifie chatroom avec texte et voix. Le texte & chatroom stuff passe par TCP et fonctionne parfaitement, tandis que l'UDP relaie uniquement les données enregistrées à d'autres clients connectés. Entre deux clients sur mon réseau domestique, le transfert audio fonctionne correctement. Mais par rapport à un client global, le serveur ne recevra pas de paquets de lui, ou il recevra des paquets du serveur.C# udpclient/udp socket - fonctionne localement mais pas sur les adresses globales

Voici un exemple:

Server utilise socket udp pendant que le client utilise UdpClient, mais le résultat est le même de toute façon et il fonctionne localement trop ..

ip global du serveur

: 222.222.222.222 serveur ip local: 192.168.2.3 port du serveur : 9999

ip client global: 111.111.111.111 client IP locale: 192.168.0.100 port client: 8888

Le serveur * se lie à son support 192.168.2.3: 9999 * reçoit de 111.111.111.111: 8888 * envoie à 111.111.111.111.111: 8888

le client * se lie à son support 192.168.0.100 * reçoit de 222.222.222.222: 9999 * envoie à 222.222.222.222: 9999

... vous obtenez ce que je veux dire. Je ne sais pas pourquoi les données ne passent pas. J'ai essayé d'envoyer/recevoir sur le port 53 (pour le client et le serveur) et cela ne devrait même pas être nécessaire non? Je veux dire que le trafic devrait passer de toute façon (tout comme il le fait avec des jeux comme call of duty) et non il n'y a pas de pare-feu Windows actif, seul routeur dans ce cas.

le client/serveur utilise connect() entre eux, pas receiveFrom/sendTo. J'ai essayé d'utiliser ça aussi, mais pas de différence.

Je reçois aucune exception ou quoi que ce soit soit si il est impossible de debug :(

Ce qui pourrait peut-être la raison pour tenir compte du fait qu'il fonctionne localement, mais pas globalement,? Je suis d'accord qu'il ressemble vraiment à un problème de pare-feu, mais comme I'e décrit ci-dessus, je ne vois pas comment des thats applicable dans mon scénario, et j'ai essayé sur le port 53 et d'autres ports ouverts ..

cheers :)

EDIT: son tout à fait beaucoup de code, mais si nécessaire je peux le copier en

Répondre

2

Vous ne pouvez pas diffuser UDP sur l'ensemble de l'Internet (je suppose que c'est ce que vous entendez par «global») - cela ne fonctionnera que dans le sous-réseau de la machine émettant l'émission. C'est pourquoi cela fonctionne localement mais pas avec les machines distantes.

Vous voudrez peut-être envisager d'utiliser IP Multicast à la place:

http://en.wikipedia.org/wiki/IP_Multicast

Cela dit, vous pouvez aussi avoir des problèmes avec ce que certains routeurs (que vous avez aucun contrôle sur) ne permet pas aux paquets de multidiffusion être transmis.

+0

La raison pour laquelle vous ne voyez pas d'exception est que le protocole UDP est ignoré. L'émetteur envoie la diffusion comme il le fait dans votre configuration locale sans problème, le problème est que le récepteur n'est pas en mesure de ramasser la diffusion. – MrEyes

+0

Globalement, je veux dire à un client sur Internet, au lieu de simplement sur le réseau local: p par exemple sur le réseau local, j'utilise simplement l'adresse IP locale pour me connecter au lieu de l'adresse IP globale. (Global était peut-être un mauvais mot pour cela) Multicast envoie simplement à plusieurs ordinateurs en dupliquant les paquets aux passerelles nécessaires? Je veux simplement essayer d'abord obtenir une connexion 1-to-1 – KaiserJohaan

+0

S'il s'agit juste d'une connexion 1 à 1, vous devez essayer d'utiliser des sockets standard/remoting/wcf au lieu d'utiliser un protocole de diffusion. – MrEyes

Questions connexes