Когда клиент отправляет сообщение на сервер, оно усекается - PullRequest
1 голос
/ 25 июля 2011

Я новичок в многопоточности.Я пытаюсь сделать отправку сообщений между клиентом и сервером.Когда я отправляю сообщение на сервер, мой вывод на сервере должен быть «Aji Computer: Спасибо!: D», но вместо этого я получаю усеченные данные «Aji Computer: Thank».

    public QuoteServerThread(String name) throws IOException {
super(name);
socket = new DatagramSocket(4445);

 byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);

in.close();

socket.receive(packet);

String dString = "Wassup " + packet.getAddress().getHostName() + "!";
//if (in == null) dString = new Date().toString();
//else dString = getNextQuote();
buf = dString.getBytes();
InetAddress address = packet.getAddress();
int port = packet.getPort();
packet = new DatagramPacket(buf, buf.length, address, port);
socket.send(packet);

//THIS IS WHERE IM SUPPOSE TO PRINT "Aji Computer: Thanks! :D". But it prints out wrongly
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
System.out.println(received);   
socket.close();

Код клиента

   DatagramSocket socket = new DatagramSocket();
    byte[] buf = new byte[256];
    InetAddress address = InetAddress.getByName("Aji Computer");
    DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445);
    socket.send(packet);
    packet = new DatagramPacket(buf, buf.length);
    socket.receive(packet);
    String received = new String(packet.getData(), 0, packet.getLength());
    System.out.println("Server: " + received);

    //THIS IS WHERE I SENT MY "Aji Computer: Thanks! :D" PACKET TO SERVER.
    buf = new byte[256];
    String str = "Aji Computer: Thanks! :D";
    buf = str.getBytes();
    packet = new DatagramPacket(buf, buf.length, address, 4445);
    socket.send(packet);
    socket.close();

}

Просто чтобы сообщить, что этот код от Oracle.Я немного изменил, чтобы знать, как это работает.

1 Ответ

1 голос
/ 25 июля 2011

Вы переназначаете размер вашего байтового массива от 256 байтов до: buf = dString.getBytes(); И далее в программе вы создали новый пакет для получения при использовании packet = new DatagramPacket(buf, buf.length); При этом используется длина dString.getBytes() вместо byte[256]Я предполагаю, что dString.getBytes() имеет меньше места, чем "Aji Computer: Спасибо!"

Попробуйте переназначить свой байтовый массив на его первоначальное значение:

buf = new byte[256];

РЕДАКТИРОВАТЬ: убрал 'байт' сверху

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