如何在局域网 (LAN) 之外连接 DatagramSocket 服务器和客户端?
How do you connect a DatagramSocket server and client outside of a local area network(LAN)?
我可以在我的局域网 (LAN) 内连接我的 DatagramSocket 服务器和客户端,但我无法在局域网外连接。
这是我的代码:
游戏服务器class:
public class GameServer extends Thread {
private DatagramSocket socket;
public GameServer() {
try {
this.socket = new DatagramSocket(7081,InetAddress.getByName("0.0.0.0"));
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
if(new String(packet.getData()).trim().equalsIgnoreCase("ping")){
sendData("pong".getBytes(),packet.getAddress(),packet.getPort());
}
System.out.println(new String(packet.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void sendData(byte[] data, InetAddress ipAddress, int port) {
DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, port);
try {
this.socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
}
游戏客户端class:
public class GameClient extends Thread {
private InetAddress ipAddress;
private DatagramSocket socket;
public GameClient(String ipAddress) {
try {
this.socket = new DatagramSocket();
this.ipAddress = InetAddress.getByName(ipAddress);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
System.out.println(new String(packet.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void sendData(byte[] data) {
DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, 7081);
try {
socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行客户端class:
public class RunClient {
public static void main(String[] args) {
GameClient client = new GameClient("/*Here is my external ip address*/"); //If i am running this for LAN then 192.168.1.67 and localhost work
client.start();
client.sendData("ping".getBytes());
}
}
RunServer class:
public class RunServer {
public static void main(String[] args) {
GameServer server = new GameServer();
server.start();
}
}
这是我的端口转发配置:
一些附加信息:
我的本地 IP 地址是 192.168.1.67
我使用的端口是 7081
当我在 http://www.canyouseeme.org 检查我的 ip 和端口时,它给了我以下错误:
Error: I could not see your service on "my external ip" on port (7081)
我没有发现您的代码有任何问题。该站点 (http://www.canyouseeme.org) 必须尝试使用 TCP 而不是 UDP。
请将端口 7081 添加到防火墙中,以便它允许端口上的传入连接。
当您在 LAN 中尝试时,IP 可能会有所不同,当您在外部尝试时,您必须尝试使用外部 ip,应该将其配置为将请求重定向到您的本地 ip。
谢谢,
Ankireddy波卢
我可以在我的局域网 (LAN) 内连接我的 DatagramSocket 服务器和客户端,但我无法在局域网外连接。
这是我的代码:
游戏服务器class:
public class GameServer extends Thread {
private DatagramSocket socket;
public GameServer() {
try {
this.socket = new DatagramSocket(7081,InetAddress.getByName("0.0.0.0"));
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
if(new String(packet.getData()).trim().equalsIgnoreCase("ping")){
sendData("pong".getBytes(),packet.getAddress(),packet.getPort());
}
System.out.println(new String(packet.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void sendData(byte[] data, InetAddress ipAddress, int port) {
DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, port);
try {
this.socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
}
游戏客户端class:
public class GameClient extends Thread {
private InetAddress ipAddress;
private DatagramSocket socket;
public GameClient(String ipAddress) {
try {
this.socket = new DatagramSocket();
this.ipAddress = InetAddress.getByName(ipAddress);
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public void run() {
while (true) {
byte[] data = new byte[1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
try {
socket.receive(packet);
System.out.println(new String(packet.getData()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void sendData(byte[] data) {
DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, 7081);
try {
socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行客户端class:
public class RunClient {
public static void main(String[] args) {
GameClient client = new GameClient("/*Here is my external ip address*/"); //If i am running this for LAN then 192.168.1.67 and localhost work
client.start();
client.sendData("ping".getBytes());
}
}
RunServer class:
public class RunServer {
public static void main(String[] args) {
GameServer server = new GameServer();
server.start();
}
}
这是我的端口转发配置:
一些附加信息:
我的本地 IP 地址是 192.168.1.67
我使用的端口是 7081
当我在 http://www.canyouseeme.org 检查我的 ip 和端口时,它给了我以下错误:
Error: I could not see your service on "my external ip" on port (7081)
我没有发现您的代码有任何问题。该站点 (http://www.canyouseeme.org) 必须尝试使用 TCP 而不是 UDP。
请将端口 7081 添加到防火墙中,以便它允许端口上的传入连接。
当您在 LAN 中尝试时,IP 可能会有所不同,当您在外部尝试时,您必须尝试使用外部 ip,应该将其配置为将请求重定向到您的本地 ip。
谢谢, Ankireddy波卢