Я пытаюсь отправить несколько значений в одном пакете по 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 восстановлено неправильно.