使用java socket在不同网络之间进行通信

时间:2015-12-15 10:19:22

标签: java sockets networking mqtt node-red

我使用java socket创建了一个java聊天应用程序。它可以在本地网络中进行通信,但如果我使用其他网络则无法正常工作。我尝试使用公共IP,但仍未连接。 聊天应用程序有一个serverGUI和clientGUI,因此,我已经使用其公共IP在PC上启动了serverGUI。然后我连接了我在其他网络中连接的笔记本电脑,并尝试通过输入PC的公共IP来连接到服务器,但它没有连接。

我也被告知要使用MQTT,但我还没有找到一个有用的教程。 我正在使用MQTT Paho并使用Node-Red

请帮助我通过不同的网络进行沟通。

2 个答案:

答案 0 :(得分:1)

使用MQTT的简单解决方案是使用公共MQTT代理(服务器)并让您的客户端连接到它。

仅列举其中几个: test.mosquitto.org iot.eclipse.org
请注意,消息将公开,即任何人都可以阅读它们。

您的客户端都应该能够连接,这是如何使用Java中的Paho MQTT客户端进行连接的示例。

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);

您的应用程序必须使用不同的clientId。然后,您应该使用唯一的主题结构,例如在your/java/package/chat/<roomname>/msg/<username>/下发布您的邮件。

答案 1 :(得分:0)

如果网络和NAT之间有路由器,请确保将所需端口上的连接路由到服务器内部IP地址。

例如:

我的外部IP是8.8.8.8,我想连接到端口65565。 内部IP为192.168.0.10,等待连接65565。 在路由器上,端口将来自端口65565的外部IP的每个请求转发到192.168.0.10。