В настоящее время вы используете кодировку платформы по умолчанию для кодирования и декодирования строк. Вы должны абсолютно не делать этого . Укажите кодировку как в вызове getBytes()
, так и в вызове конструктора, например,
byte[] outBuffer = message.getBytes("UTF-8");
Также обратите внимание, что ваш текущий код создает байтовый массив длиной 1000, а затем сразу выбрасывает его:
byte[] outbuffer = new byte[1000];
// Byte array created on previous line is now useless!
outbuffer = message.getBytes();
... не делай этого.
Мы не можем сказать намного больше из кода, который вы нам дали - если бы вы могли создавать короткие, но полные программы, демонстрирующие проблему, это действительно помогло бы.
Для отладки я бы предложил вам записать содержимое полученного вами пакета дейтаграммы, пока он еще в двоичном виде. Предположительно это не то, что вы ожидали , но это не помогает показать, что это было .
РЕДАКТИРОВАТЬ: Вот пара коротких, но полных программ, которые делают работают:
import java.net.*;
public class Server {
public static void main(String[] args) throws Exception{
DatagramSocket socket = new DatagramSocket(9999);
byte[] inbuffer = new byte[1000];
DatagramPacket packet = new DatagramPacket(inbuffer, inbuffer.length);
socket.receive(packet);
String response = new String(packet.getData(), 0,
packet.getLength(), "UTF-8");
System.out.println(response);
if("<HELLO>".equals(response)){
System.out.println("OK");
} else {
System.out.println("ERROR");
}
}
}
// Client.java
import java.net.*;
public class Client {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket();
byte[] output = "<HELLO>".getBytes("UTF-8");
DatagramPacket packet = new DatagramPacket(output, output.length,
InetAddress.getLocalHost(),
9999);
socket.send(packet);
}
}