我使用java socket创建了一个java聊天应用程序。它可以在本地网络中进行通信,但如果我使用其他网络则无法正常工作。我尝试使用公共IP,但仍未连接。 聊天应用程序有一个serverGUI和clientGUI,因此,我已经使用其公共IP在PC上启动了serverGUI。然后我连接了我在其他网络中连接的笔记本电脑,并尝试通过输入PC的公共IP来连接到服务器,但它没有连接。
我也被告知要使用MQTT,但我还没有找到一个有用的教程。 我正在使用MQTT Paho并使用Node-Red
请帮助我通过不同的网络进行沟通。
答案 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。