Java UDP усеченные данные получены - PullRequest
0 голосов
/ 10 января 2019

Я делал простое клиентское и серверное приложение UDP на Java.

Я отправляю «ДАННЫЕ» с клиента на сервер. Сервер должен отправлять клиенту строку длиной 23 символа.

Вот код для сервера:

try 
        {
            String text;
            int server_port = 3333;
            byte[] message = new byte[1500];
            DatagramPacket p = new DatagramPacket(message, message.length);
            DatagramSocket s = new DatagramSocket(server_port);
            s.receive(p);

            text = new String(message);
            System.out.println(text);

            if(text.contains("DATA"))
            {
                InetAddress IPAddress = p.getAddress();
                int port = p.getPort();

                String messageStr="1:0:0:0:1:0:1:0:1:0:1:0";
                int msg_length=messageStr.length();
                message = messageStr.getBytes();
                System.out.println(messageStr + " " + message.length);
                p = new DatagramPacket(message, msg_length, IPAddress, port);
                s.send(p);
            }
        }
        catch(Exception ex)
        {
            System.out.println(ex.toString());
        }

И клиент:

try {
    String messageStr=message;
    int server_port = port;
    DatagramSocket s = new DatagramSocket();
    InetAddress local = InetAddress.getByName(ipaddr);
    int msg_length = messageStr.length();
    byte[] message = messageStr.getBytes();
    DatagramPacket p = new DatagramPacket(message, msg_length, local ,server_port);
    s.send(p);

    s.receive(p);
    msg = new String(message, 0, p.getLength());

    //print msg

    s.close();
}
catch(Exception ex)
{
    msg = ex.toString();
}

Однако я столкнулся с очень странной проблемой. Данные, полученные на стороне клиента, усекаются до 4 символов. Чтобы быть более точным, усекается до длины данных, которые изначально отправляются клиентом.

Что означает, что если я отправлю «DAT» вместо «DATA», он будет усечен до 3 символов вместо его первоначальной длины 23.

Есть идеи, что на самом деле пошло не так?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...