Java DatagramSocket не получает данные

Я пишу простой клиент/сервер на java, и у меня возникла проблема, которую я не могу исправить. Я использую DatagramSocket как на клиенте, так и на сервере, и мой сервер просто не может получать данные. Я не получаю никаких ошибок, но это просто не работает.

Вот мой исходный код для сервера:

public class GameServer {

    public static final String serverBuild = "0.00 (050319.milestone0-main)";
    public static final String protocolBuild = "1";

    public DatagramSocket serverSocket;

    public boolean isRunning = false;
    public Thread clientHandler;

    public GameServer(int port, String serverName) {
        System.out.println("Server> Starting a server on port: " + port + ".");
        System.out.println("Server> " + serverName + " running on server build " + serverBuild + ".");
        System.out.println("Server> Using protocol ID: " + protocolBuild + ".");

        isRunning = true;
        try {
            serverSocket = new DatagramSocket(port);
        }catch(Exception ex) {
            System.out.print("Server> ");
            ex.printStackTrace();
        }

        clientHandler();
    }

    public void clientHandler() {
        clientHandler = new Thread(new Runnable() {

            public void run() {

                while(isRunning) {
                    byte[] buffer = new byte[256];
                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

                    try {
                        serverSocket.receive(packet);
                        System.out.println("Server> " + new String(packet.getData(), 0, packet.getData().length));

                    } catch (IOException e) {
                        System.out.print("Server> ");
                        e.printStackTrace();
                    }

                }

            }

        });
        clientHandler.start();
    }

}

Вот мой исходный код для клиента:

    public class GameClient {

    public GameClient() {

        try {

            DatagramSocket socket = new DatagramSocket(25567);
            byte[] buffer = new byte[256];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.0.24"), 25567);
            socket.send(packet);

        }catch(Exception ex) {
            ex.printStackTrace();
        }

    }

}

Клиент очень простой, потому что я искал, почему мой сервер не работает.

Каково значение port на сервере? И какой IP-адрес хоста сервера? И почему вы используете один и тот же порт для сервера и клиента в клиенте?

user207421 05.03.2019 11:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Консоль ничего не печатает, потому что клиент отправляет пакет — это пустой массив. Сервер работает правильно.

Этот ответ бесполезен. Не могли бы вы объяснить, что не так с кодом OP?

maio290 05.03.2019 11:10

@ maio290 плохие вопросы порождают плохие ответы ... вопрос должен быть помечен как не относящийся к теме.

JeffUK 05.03.2019 11:13

@ maio290 Код о клиенте другой. сокет.connect()

Yibo 05.03.2019 11:27

Это не пустой массив. Это массив из 256 элементов, полный нулей. Не то же самое.

user207421 06.03.2019 04:09

Я имею в виду, что каждый байт в массиве равен '', поэтому не печатайте на консоли. Вы можете попробовать String.getbytes() заменить буфер, а затем проверить результат.

Yibo 06.03.2019 04:34

Другие вопросы по теме