Java: может отправлять и получать UDP-пакеты, но полученные данные являются бессмысленными - PullRequest
1 голос
/ 20 ноября 2019

РЕДАКТИРОВАТЬ: Решено (см. Комментарий)

Я пытаюсь написать очень простую программу / систему, где одна программа отправляет UDP-пакеты, содержащие строку со словом iwas и однозначным числом,например, "iwas2". Вторая программа, которая должна принимать пакет (а затем записывать его содержимое в вектор).
Кажется, что отправляющая программа работает нормально, а принимающая программа - не так много. Когда я запускаю принимающую программу, он получает пакет, как только запускающая программа запускается / начинает отправлять (и не получает пакет / неправильно интерпретирует другие вещи как пакет ранее), но полученный контент не соответствуетсодержание отправлено или имеет какой-либо смысл для меня вообще. Например, отправитель отправляет «iwas1», а получатель понимает «[B @ 6a2bcfcb». (Согласно wireshark, часть данных пакета отправителя на самом деле является «iwas1» длиной 5 байт, так что это не проблема.)

//code of sender-programm
import java.io.IOException;
import java.net.*;
import java.util.Random;
import java.util.concurrent.TimeUnit;

public class umgebung {
    public static void main(String[] args) throws IOException, InterruptedException {


        //try {
            //byte[] buffer = new byte[65508];
            //InetAddress address = InetAddress.getByName("jenkov.com");

            //DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, 9000);

            //Integer inteins = new Integer(5);
            Random zahlgen = new Random();
            int aktwetter = 0;              //initialisieurng
        DatagramSocket socketeins = new DatagramSocket(90);


            while (0 != 1) {
                /*      
                int neugenentscheidungszahl = zahlgen.nextInt() % 10;
                if (neugenentscheidungszahl > 8) {                          
                    aktwetter = zahlgen.nextInt() % 4;      
                }
                */
                aktwetter = ++aktwetter % 4;        
                System.out.printf(aktwetter + "\n");



                String stringeins = new String("iwas" + aktwetter);
                ;
                byte[] buffer = stringeins.getBytes();
                //InetAddress empfangsip;
                //empfangsip = InetAddress.getByName("127.0.0.1");

                DatagramPacket paketeins = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("127.0.0.1"), 50);       //senden an port 50
                //DatagramSocket socketeins = new DatagramSocket(90);
                socketeins.send(paketeins);

                TimeUnit.SECONDS.sleep(1);
            }
        //}
        /*
        catch(IOException | InterruptedException e){
            //e.printStackTrace();
            System.out.printf("verkackt");
        }
        */
    }
}

.

//code of receiver-programm  
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.ByteBuffer;

public class empfaenger {
    public static void main(String[] args) throws IOException {
        InetAddress empfangadresse = InetAddress.getByName("127.0.0.1");
        DatagramSocket socketeins = new DatagramSocket(50, empfangadresse);


        byte[] empfangbytearray = new byte[65000];                        
        DatagramPacket empfangpaket = new DatagramPacket(empfangbytearray, empfangbytearray.length);
        socketeins.receive(empfangpaket);


        String teststring = new String(empfangpaket.getData().toString());
        System.out.println("bla" + teststring + "bla");
    }
}

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

1 Ответ

1 голос
/ 20 ноября 2019

В строке String teststring = new String(empfangpaket.getData().toString());

Измените его на

String teststring = new String(empfangpaket.getData());

Вы печатаете результат Byte []. ToString () вместо того, что вы ожидаете.

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