Java DatagramSocket - отправлять несколько значений в одном пакете - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь отправить несколько значений в одном пакете по UDP.Я использую ByteArrayOutputStream для записи байтов в байтовом массиве и ByteArrayInputStream для чтения этих значений на стороне сервера.Проблема в том, что максимальное значение, которое я могу записать в ByteArrayOutputStream, которое можно правильно прочитать, равно 255, но мне нужно отправить большее значение.Вот мой код для серверной стороны

public class Server implements Runnable {

    private DatagramSocket socket;
    private boolean running;
    private byte[] buf = new byte[1024];

    public Server() throws SocketException {
        socket = new DatagramSocket(4445);
    }

    @Override
    public void run() {
        while (true) {
            try {
                DatagramPacket packet
                        = new DatagramPacket(buf, buf.length);
                socket.receive(packet);

                ByteArrayInputStream bInput = new ByteArrayInputStream(buf);

                System.out.println(bInput.read());
                System.out.println(bInput.read());


            } catch (IOException e) {

            }
        }
    }
}

и для клиентской стороны

public class Main {

    private static InetAddress ip;


    public static void main(String[] args) throws IOException {
        ip = InetAddress.getLocalHost();
        Runnable server = new Server();
        new Thread(server).start();

        DatagramSocket ds = new DatagramSocket();
        byte[] data = new byte[1024]; // Max length

        DatagramPacket packet = new DatagramPacket(data, data.length);
        packet.setAddress(ip);
        packet.setPort(4445);

        ByteArrayOutputStream ba = new ByteArrayOutputStream();
        as.write(5);
        as.write(300);
        packet.setData(ba.toByteArray());

        ds.send(packet);
  }
}

Таким образом, я могу получить число 5 из ByteArrayInputStream, но любое значение больше 255 восстановлено неправильно.

...