Получить размер строки из пакета дейтаграмм - PullRequest
0 голосов
/ 05 мая 2020

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

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

Клиент

  import java.net.*;
    import java.io.*;

public class UDPClient {
  public static void main(String args[]) {
    // args give message contents and server hostname
    if (args.length != 2) {
      System.err.println("Usage: java UDPClient 'Text Message' <server hostname>");
      System.exit(1);
    }
    DatagramSocket aSocket = null;
    try {
      aSocket = new DatagramSocket();
      byte[] m = args[0].getBytes();
      InetAddress aHost = InetAddress.getByName(args[1]);
      int serverPort = 6789;

      DatagramPacket request = new DatagramPacket(m, m.length, aHost, serverPort);
      aSocket.send(request);
      byte[] buffer = new byte[1000];
      DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
      aSocket.receive(reply);
      System.out.println("Reply: " + new String(reply.getData()));
      System.out.println("Reply: " + reply.getData().toString().length());


    } catch (SocketException e) {
      System.out.println("Socket: " + e.getMessage());
    } catch (IOException e) {
      System.out.println("IO: " + e.getMessage());
    } finally {
      if (aSocket != null)
        aSocket.close();
    }
  }
}

Сервер

import java.net.*;
import java.io.*;

public class UDPServer {
    public static void main(String args[]) {
        DatagramSocket aSocket = null;
        try {
            aSocket = new DatagramSocket(6789);
            byte[] buffer = new byte[1000];
            while (true) {
                DatagramPacket request = new DatagramPacket(buffer, buffer.length);
                aSocket.receive(request);

                String m = new String(request.getData()).replaceAll(" ", "");
                int tam = m.length();


                DatagramPacket reply = new DatagramPacket(request.getData(), tam, request.getAddress(),
                        request.getPort());
                aSocket.send(reply);
            }
        } catch (SocketException e) {
            System.out.println("Socket: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("IO: " + e.getMessage());
        } finally {
            if (aSocket != null)
                aSocket.close();
        }
    }
}
...