Проблемы с полученными и отправленными UDP-пакетами? - PullRequest
1 голос
/ 22 сентября 2011

Я пытаюсь написать простую программу о UDP Connections, чтобы узнать о них. Я реализовал некоторые основные вещи, но когда я пытаюсь отправить и вернуть то, что я отправил, но я сталкиваюсь с некоторыми проблемами, такими как

Когда я делаю это; отправить строку

"asd" на сервер, я получаю обратно asdxxxxxxxxxx и когда я пытаюсь распечатать то, что я получаю на сервере, я получаю [B @ 5f186fab

Как я могу решить эту проблему?

Чтобы быть более понятным, я посылаю вам несколько строк кода,

В клиенте;

Scanner in = new Scanner(System.in);
    String result = in.nextLine();
        // send request
    byte[] buf = new byte[1000];
    String read = result;
    InetAddress address = InetAddress.getByName("localhost");
    DatagramPacket packet = new DatagramPacket(result.getBytes(),  result.getBytes().length, address, 4445);
    socket.send(packet);

        // get response
    packet = new DatagramPacket(buf, buf.length);
    socket.receive(packet);

    // display response
    String received = new String(packet.getData(), 0, packet.getLength());
    System.out.println("Quote of the Moment: " + received);

На сервере;

            byte[] buf = new byte[1000];
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
            byte[] received = packet.getData();
            System.out.println(received.toString());

                // figure out response

        // send the response to the client at "address" and "port"
            InetAddress address = packet.getAddress();
            int port = packet.getPort();
            packet = new DatagramPacket(received, received.length, address, port);
            socket.send(packet);

Спасибо всем

РЕДАКТИРОВАТЬ 1 Я думаю, у меня проблемы с буфером, но я не знаю, как решить.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Вы можете использовать

System.out.println(Arrays.toString(received));

, но то, что вы, вероятно, хотите, это

System.out.println(new String(received, o, lengthRead, "UTF-8"));
0 голосов
/ 16 марта 2013

Вы исправили это?

В противном случае я обнаружил, что если вы объявите получение byte[] buf с емкостью, превышающей длину строки, которую вы фактически получаете, вы закончитедо конца буфера, заполненного нежелательными байтами.

Например.если вы объявите byte[] received = new byte[1000];, но получите только строку из 4 байтов, у вас останется 996 нежелательных байтов.

Один быстрый способ обойти это - сделать что-то вроде

byte[] received = packet.getData();
System.out.println(received.toString().trim());

trim() помог мне.Надеюсь, что это поможет вам!

...