Как исправить вывод сервера, чтобы он правильно отображал сообщения от клиента? - PullRequest
0 голосов
/ 12 июня 2019

Процесс отправки сообщений на сервер кажется правильным, но сервер не показывает полученные данные.Как я могу заставить его работать правильно?

Сторона клиента:

void manageClient(){
    try(DatagramChannel datagramChannel = DatagramChannel.open();
        Scanner input = new Scanner(System.in)){
        datagramChannel.connect(socketAddress);
          while (true){
            ByteBuffer buf = ByteBuffer.allocate(512);
            String r = input.nextLine();
            buf.put(r.getBytes());
            datagramChannel.send(buf, socketAddress);
            messageToSend = null;
            buf.clear();
        }
    }
    catch (IOException e){
        e.printStackTrace();
        System.out.println("Cannot connect to the server!");
    }
}

Сторона сервера:

    byte[] message = new byte[512];
DatagramPacket datagramPacket = new DatagramPacket(message, message.length);
void manageServer(){
    System.out.println("Waiting for the messages.");
    try(DatagramSocket datagramSocket = new DatagramSocket(7755)){
        try {
            while(true){
                datagramSocket.receive(datagramPacket);
                byte[] tobeString = datagramPacket.getData();
                String q = new String(tobeString, 0, tobeString.length);
                System.out.println("Server got: " + q);
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("An error with input.");
        }
    }
    catch(SocketException e){
        System.out.println("A problem with connection occurred!");
    }
}

После нажатия кнопки «Ввод» сервер не показывает сообщениеон получил.

1 Ответ

0 голосов
/ 12 июня 2019

Некоторые изменения на стороне клиента были решением:

while (true){
            ByteBuffer buf = ByteBuffer.allocate(512);
            r = input.nextLine();
            buf.put(r.getBytes());
            buf.flip();
            datagramChannel.send(buf, socketAddress);
            r = null;
            messageToSend = null;
            buf.clear();
        }

Я изменил ссылку на строку и добавил метод .flip() в буфер.

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

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