2015-12-15 1 views
1

J'ai créé une application de discussion java en utilisant java socket. Il peut communiquer dans un réseau local, mais si j'utilise un autre réseau, cela ne fonctionne pas. J'ai essayé en utilisant IP publique mais il n'est toujours pas connecté. L'application de discussion a un serverGUI et un clientGUI, j'ai donc démarré le serverGUI sur PC en utilisant son adresse IP publique. Et puis j'ai connecté mon ordinateur portable connecté dans un autre réseau et essayé de se connecter au serveur en entrant l'adresse IP publique du PC mais pas connecté.Communication entre différents réseaux en utilisant java socket

On m'a également dit d'utiliser MQTT, mais je n'ai pas trouvé de tutoriel utile à ce sujet. J'utilise MQTT Paho et j'utilise Node-Red

S'il vous plaît, aidez-moi à communiquer sur différents réseaux.

+0

http://stackoverflow.com/questions/33468332/why-does-my-client-socket-not-connect-to-my-serversocket – Sneh

+0

Vous avez probablement besoin de configurer le transfert de port sur le routeur de votre serveur ou désactiver ou reconfigurer le pare-feu sur le serveur. – WillShackleford

Répondre

1

Une solution simple avec MQTT serait d'utiliser un courtier MQTT public (serveur) et de permettre à vos clients de s'y connecter.

Juste pour en nommer deux d'entre eux: test.mosquitto.org, iot.eclipse.org.
Veillez à ce que les messages soient public, c'est-à-dire que tout le monde puisse les lire.

Vos deux clients devraient être en mesure de se connecter, c'est un exemple sur la façon de le faire avec le client Paho MQTT en Java.

String broker = "tcp://iot.eclipse.org:1883"; 
client = new MqttClient(broker, "javachatclientid1", new MemoryPersistence()); 
client.setCallback(m_callbackHandler); 
MqttConnectOptions connOpts = new MqttConnectOptions(); 
connOpts.setCleanSession(true); 
connOpts.setUserName("username"); 
connOpts.setPassword("password"); 
client.connect(connOpts); 

Vos applications doivent utiliser un autre clientId. Vous devez ensuite utiliser une structure de rubrique unique, par exemple publier vos messages sous your/java/package/chat/<roomname>/msg/<username>/.

0

Si vous avez un routeur entre les réseaux et le NAT, assurez-vous que vous avez routé la connexion sur le port que vous souhaitez utiliser pour l'adresse IP interne du serveur.

Par exemple:

Mon IP externe est 8.8.8.8 et je veux connecter au port 65565. L'IP interne est 192.168.0.10 en attente d'une connexion 65565. Sur votre routeur, le port avant chaque demande à partir de l'adresse IP externe pour les ports 65565 à 192.168.0.10.

+0

Votre adresse IP externe est le DNS de Google? :) – Kayaman

+0

IP sur le dessus de ma tête. :) –

+0

Le numéro de port est ** <65536 ** –