java UDP聊天程序不同网络不能聊天
我正在尝试制作一个聊天程序,客户端和服务器可以在不同的网络(而不是本地主机)上彼此聊天。我目前面临一个我不知道如何解决的问题
由于某种原因,客户端和服务器无法相互连接,当我用客户端向服务器写入消息时,服务器上不会弹出任何消息。这些测试是在两台不同的计算机、不同的网络(移动数据和以太网)上进行的
我在代码中使用了来自以太网的公共ip,并在代码中用匹配的端口号转发了它。服务器正在portforwarded网络上运行
这是我的代码:
客户:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class ChatClient {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
DatagramSocket client = new DatagramSocket(7000);
byte[] receivedData = new byte[1024];
byte[] sentData;
InetAddress address = InetAddress.getByName(" PUBLIC IP IS HERE, won't show it for obvious reasons ");
while (true) {
String message = scanner.nextLine();
sentData = message.getBytes();
DatagramPacket dp1 = new DatagramPacket(sentData, sentData.length, address, 7000);
client.send(dp1);
DatagramPacket dp4 = new DatagramPacket(receivedData, receivedData.length);
client.receive(dp4);
String receivedMessage = new String(dp4.getData());
System.out.println(receivedMessage);
}
}
}
服务器:
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class ChatServer {
public static void main(String[] args) throws IOException {
DatagramSocket server = new DatagramSocket();
Scanner scanner = new Scanner(System.in);
byte[] receivedData = new byte[1024];
byte[] sentData;
while (true) {
DatagramPacket dp2 = new DatagramPacket(receivedData, receivedData.length);
server.receive(dp2);
String storedData = new String(dp2.getData());
System.out.println(storedData);
InetAddress getIP = dp2.getAddress();
int port = dp2.getPort();
String sentMessage = scanner.nextLine();
sentData = sentMessage.getBytes();
DatagramPacket dp3 = new DatagramPacket(sentData, sentData.length, getIP, port);
server.send(dp3);
}
}
}
当代码仅更改为localhost时,该代码才起作用
有人知道我做错了什么吗?非常感谢您的回复
# 1 楼答案
假设客户端连接到服务器,服务器需要指定要侦听的端口,客户端需要指定服务器的IP和端口
客户:
这将使用指定的IP和端口连接到服务器
服务器:
这意味着服务器监听端口7000,因此在该端口下可用
除此之外,确保端口转发工作正常。如果使用UDP,还需要将其配置为TCP
还要注意的是,UDP既不确认也不验证包。如果你想拥有这些功能,你需要使用TCP或者自己实现这些功能