有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

internet上的Java UDP客户端/服务器socket不工作

我正在尝试实现一个UDP客户端和服务器,用于来回发送消息

我的服务器设置在端口6060的本地IP.215上,而我的客户端设置在端口6061的本地IP.101上。两个端口都已在路由器(UDP)上转发。我使用一些在线工具测试了这些端口,它确认这些端口是开放的

服务器从监听开始,这意味着客户端将发送第一条消息。当客户端将其消息发送到端口6060上的本地IP.215时,通信工作正常。但是,当它使用同一端口发送到internet IP时,服务器不会收到任何信息。我不明白为什么

以下是我的客户代码:

public static void main(String args[]) throws Exception {
    DatagramSocket clientSocket = null;
    clientSocket = new DatagramSocket(null);
    clientSocket.bind(new InetSocketAddress("192.168.1.101", 6061));
    InetAddress serverIPAddress = InetAddress.getByName("my.internet.ip");
    int serverPort = 6060;
    byte[] sendData = new byte[504];
    byte[] receiveData = new byte[504];
    while (true) {
        String sentence = "A" + Double.toString(Math.random()) + "A";
        sendData = sentence.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort);
        clientSocket.send(sendPacket);
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        clientSocket.receive(receivePacket);
        String modifiedSentence = new String(receivePacket.getData());
    }
}

下面是我的服务器代码:

public static void main(String[] args) throws IOException {
    DatagramSocket serverSocket = new DatagramSocket(null);
    InetSocketAddress serverAddress = new InetSocketAddress("192.168.1.215", 6060);
    serverSocket.bind(serverAddress);
    byte[] receiveData = new byte[504];
    byte[] sendData = new byte[504];
    while (true) {
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        serverSocket.receive(receivePacket);
        String sentence = new String(receivePacket.getData());
        InetAddress IPAddress = receivePacket.getAddress();
        int port = receivePacket.getPort();
        String capitalizedSentence = sentence.toUpperCase();
        sendData = capitalizedSentence.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
        serverSocket.send(sendPacket);
    }
}

我删除了不必要的代码,例如控制台打印等,以使其更具可读性

你知道为什么不能通过互联网IP发送消息吗


共 (0) 个答案