Java服务器doen';不要从外部机器获取包装

Java服务器doen';不要从外部机器获取包装,java,Java,只有本地客户端才能连接到服务器 客户端代码: public InetAddress ipAddress; private DatagramSocket socket; public Client() { try { this.socket = new DatagramSocket(); this.ipAddress = getIpAddress(); } catch (SocketException e) {

只有本地客户端才能连接到服务器

客户端代码:

public InetAddress ipAddress;
private DatagramSocket socket;

public Client()
{
    try 
    {
        this.socket = new DatagramSocket();
        this.ipAddress = getIpAddress();
    } 
    catch (SocketException e) 
    {
        e.printStackTrace();
    }
}

public void run()
{
    while(true)
    {
        byte[] data = new byte[1024];
        DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, 1331);
        try 
        {
            socket.send(packet);
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}

private InetAddress getIpAddress()
{
    String ipAddress;
    try 
    {
        URL url = new URL("http://checkip.amazonaws.com/");
        BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
        ipAddress = br.readLine();
    } catch (IOException e) 
    {
        e.printStackTrace();
        ipAddress = "null";
    }
    try 
    {
        return InetAddress.getByName(ipAddress);
    } 
    catch (UnknownHostException e) 
    {
        e.printStackTrace();
        return null;
    }
}

public static void main(String args[])
{
    Client client = new Client();
    client.start();
}
private DatagramSocket socket;

public Server()
{
    try 
    {
        this.socket = new DatagramSocket(null);
        socket.bind(new InetSocketAddress(getIpAddress(), 1331));
        System.out.println(socket.getInetAddress());
    } 
    catch (SocketException 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("aa");
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}

private InetAddress getIpAddress()
{
    try
    {
        return InetAddress.getByName("0.0.0.0");
    } 
    catch (UnknownHostException e) 
    {
        e.printStackTrace();
        return null;
    }
}

public static void main(String args[])
{
    Server server = new Server();
    server.start();
}
服务器端代码:

public InetAddress ipAddress;
private DatagramSocket socket;

public Client()
{
    try 
    {
        this.socket = new DatagramSocket();
        this.ipAddress = getIpAddress();
    } 
    catch (SocketException e) 
    {
        e.printStackTrace();
    }
}

public void run()
{
    while(true)
    {
        byte[] data = new byte[1024];
        DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, 1331);
        try 
        {
            socket.send(packet);
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}

private InetAddress getIpAddress()
{
    String ipAddress;
    try 
    {
        URL url = new URL("http://checkip.amazonaws.com/");
        BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
        ipAddress = br.readLine();
    } catch (IOException e) 
    {
        e.printStackTrace();
        ipAddress = "null";
    }
    try 
    {
        return InetAddress.getByName(ipAddress);
    } 
    catch (UnknownHostException e) 
    {
        e.printStackTrace();
        return null;
    }
}

public static void main(String args[])
{
    Client client = new Client();
    client.start();
}
private DatagramSocket socket;

public Server()
{
    try 
    {
        this.socket = new DatagramSocket(null);
        socket.bind(new InetSocketAddress(getIpAddress(), 1331));
        System.out.println(socket.getInetAddress());
    } 
    catch (SocketException 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("aa");
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}

private InetAddress getIpAddress()
{
    try
    {
        return InetAddress.getByName("0.0.0.0");
    } 
    catch (UnknownHostException e) 
    {
        e.printStackTrace();
        return null;
    }
}

public static void main(String args[])
{
    Server server = new Server();
    server.start();
}
我试图关闭防火墙,关闭Windows Defender,将NAT添加到路由器

我还检查了netstat中的端口是否为外部端口

使服务器正常工作的唯一方法是将客户端的ipAddress更改为“localhost”

那么代码就可以正常工作了


有什么方法可以将地址添加到服务器,并且玩家可以仅使用ip地址连接到服务器?

要将服务器连接到多台其他计算机,您应该将客户端的ip地址设置为服务器计算机的地址

如何知道服务器计算机的IP地址

在安装服务器的计算机中:

Windows:转到CMD,然后键入
ipconfig
您需要
IPv4
地址


Mac:转到终端,然后键入
ifconfig
您需要的
inet
地址。

为了将服务器连接到多台其他计算机,您应该将客户端IP地址设置为服务器计算机的地址

如何知道服务器计算机的IP地址

在安装服务器的计算机中:

Windows:转到CMD,然后键入
ipconfig
您需要
IPv4
地址


Mac:转到终端,然后键入
ifconfig
您需要的
inet
地址。

您正在使用自己的IP地址。如果要向服务器发送数据,必须使用服务器的IP地址。主机名checkip.amazonaws.com应该解析为什么?您是否已尝试将服务器直接绑定为ip地址?在您的主机文件中,该主机名是否未链接到localhost?@Nehorai感谢您的帮助:)您正在使用自己的IP地址。如果要向服务器发送数据,必须使用服务器的IP地址。主机名checkip.amazonaws.com应该解析为什么?您是否已尝试将服务器直接绑定为ip地址?在您的主机文件中,该主机名是否未链接到localhost?@Nehorai感谢您的帮助:)