使用 java 套接字在不同网络之间通信
communicate between different network using java socket
我使用 java 套接字创建了一个 java 聊天应用程序。它可以在本地网络中通信,但如果我使用另一个网络,它就不起作用。我已经尝试使用 public IP,但仍然无法连接。
聊天应用程序有一个 serverGUI 和一个 clientGUI,所以我在 PC 上使用它的 public IP 启动了 serverGUI。然后我将我的笔记本电脑连接到另一个网络并尝试通过输入 PC 的 public IP 连接到服务器,但它没有连接。
我也被告知要使用 MQTT,但我没有找到关于它的有用教程。
我正在使用 MQTT Paho 并使用 Node-Red
请帮助我通过不同的网络进行通信。
如果您在网络和它后面的 NAT 之间有一个路由器,请确保将您想要的端口上的连接路由到服务器的内部 IP 地址。
例如:
我的外部 IP 是 8.8.8.8,我想连接到端口 65565。
内部IP为192.168.0.10等待连接65565。
在您的路由器上,端口将来自外部 IP 的每个请求转发到端口 65565 到 192.168.0.10。
MQTT 的一个简单解决方案是使用 public MQTT 代理(服务器)并让您的客户端连接到它。
仅举几个例子:test.mosquitto.org、iot.eclipse.org.
请注意消息将是 public,即任何人都可以阅读它们。
您的两个客户端都应该能够连接,这是一个关于如何使用 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>/
.
下发布您的消息
我使用 java 套接字创建了一个 java 聊天应用程序。它可以在本地网络中通信,但如果我使用另一个网络,它就不起作用。我已经尝试使用 public IP,但仍然无法连接。 聊天应用程序有一个 serverGUI 和一个 clientGUI,所以我在 PC 上使用它的 public IP 启动了 serverGUI。然后我将我的笔记本电脑连接到另一个网络并尝试通过输入 PC 的 public IP 连接到服务器,但它没有连接。
我也被告知要使用 MQTT,但我没有找到关于它的有用教程。 我正在使用 MQTT Paho 并使用 Node-Red
请帮助我通过不同的网络进行通信。
如果您在网络和它后面的 NAT 之间有一个路由器,请确保将您想要的端口上的连接路由到服务器的内部 IP 地址。
例如:
我的外部 IP 是 8.8.8.8,我想连接到端口 65565。 内部IP为192.168.0.10等待连接65565。 在您的路由器上,端口将来自外部 IP 的每个请求转发到端口 65565 到 192.168.0.10。
MQTT 的一个简单解决方案是使用 public MQTT 代理(服务器)并让您的客户端连接到它。
仅举几个例子:test.mosquitto.org、iot.eclipse.org.
请注意消息将是 public,即任何人都可以阅读它们。
您的两个客户端都应该能够连接,这是一个关于如何使用 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>/
.