Недавно начал изучать сетевое программирование и Java. Есть сервер, который отправляет клиенту пакет с данными, представленный в виде byte[ ], для отправки использовал PrintWriter. Принимал на клиенте с помощью Scanner, и почему-то, к примеру, вместо массива byte, где 53 элемента, получался массив из 10 элементов. Scanner жизненно необходим из-за удобного hasNext(), в других аналогах я не нашёл похожего, но Scanner не очень работает с byte[ ], поэтому задумка была такая: пакет превращаем в byte[ ], а потом в String, посылаем его, на клиенте String превращаем в byte[ ], а потом получаем исходный пакет с помощью parse. Но так не работает. BufferedInputStream / BufferedOutputStream работают правильно, но в таком случае нет hasNext() для бесперебойной работы программы.
Что я делаю не так?
Клиент
while (true) {
if (input.hasNext()) {
byte[] message = input.nextLine().getBytes(StandardCharsets.UTF_8);
MSPacket pct = MSPacket.parse(message);
System.out.println(new String(pct.senderName, StandardCharsets.UTF_8) +
new String(pct.msg, StandardCharsets.UTF_8));
Сервер
MSPacket msgToClient = new MSPacket("Сервер", "Hello!!!", 0x01);
output.println(msgToClient.toPacket().toString());
output.flush();