Как очистить / очистить строковое значение в Java

1

Я только начал изучать Java. Я узнаю о запуске простого UDP-сервера. Программа работает нормально, если я отправляю пакет с "Hello", клиент возвращает значение Hello. Однако, если я отправляю другой пакет с 1, отображаемое значение равно 1ello. Я попытался очистить строку с нулевым значением и "", который не сработал. Как мне это сделать?

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

class UDPServer
{
   public static void main(String args[]) throws Exception
      {
         DatagramSocket serverSocket = new DatagramSocket(9876);
            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];
            while(true)
               {
                  DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                  serverSocket.receive(receivePacket);
                  String sentence = new String( receivePacket.getData());
                  System.out.println("RECEIVED: " + sentence);
                  InetAddress IPAddress = receivePacket.getAddress();
                  int port = receivePacket.getPort();
                  String capitalizedSentence = sentence.toUpperCase();
                  sendData = capitalizedSentence.getBytes();
                  DatagramPacket sendPacket =
                  new DatagramPacket(sendData, sendData.length, IPAddress, port);
                  serverSocket.send(sendPacket);
               }
      }
}
Теги:
string

2 ответа

0
Лучший ответ

Я исправил это. Извините, что задал вопрос.

Я переместил команды receiveData & sendData в цикл while, поскольку они сохраняли данные. Код сейчас

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

class UDPServer
{
   public static void main(String args[]) throws Exception
      {
         DatagramSocket serverSocket = new DatagramSocket(9876);

            while(true)
               {
                  byte[] receiveData = new byte[1024];
                  byte[] sendData = new byte[1024];
                  DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                  serverSocket.receive(receivePacket);
                  String sentence = new String( receivePacket.getData());
                  System.out.println("RECEIVED: " + sentence);
                  InetAddress IPAddress = receivePacket.getAddress();
                  int port = receivePacket.getPort();
                  String capitalizedSentence = sentence.toUpperCase();
                  sendData = capitalizedSentence.getBytes();
                  DatagramPacket sendPacket =
                  new DatagramPacket(sendData, sendData.length, IPAddress, port);
                  serverSocket.send(sendPacket);
               }
      }
}
  • 0
    В вашем случае создание новых массивов в каждом цикле не является необходимым. Решение @Razib выглядит хорошо: просто сбросьте byte[] в начале цикла с помощью Arrays.fill(sendData, (byte)0); Arrays.fill(receivedData, (byte)0);
0

Кажется, что byte[] sendData содержит некоторые более ранние данные. Перед отправкой данных каждый раз, когда вы можете очистить свой массив байтов. Попытайтесь очистить свой sendData -

byte[] sendData = new byte[1024];
Arrays.fill(sendData, (byte)'');
  • 0
    Вы имеете в виду sendData а не sendPacket ...
  • 0
    Да, вы правы. Это была опечатка. Я только что исправил это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню