Я делал простое клиентское и серверное приложение UDP на Java.
Я отправляю «ДАННЫЕ» с клиента на сервер. Сервер должен отправлять клиенту строку длиной 23 символа.
Вот код для сервера:
try
{
String text;
int server_port = 3333;
byte[] message = new byte[1500];
DatagramPacket p = new DatagramPacket(message, message.length);
DatagramSocket s = new DatagramSocket(server_port);
s.receive(p);
text = new String(message);
System.out.println(text);
if(text.contains("DATA"))
{
InetAddress IPAddress = p.getAddress();
int port = p.getPort();
String messageStr="1:0:0:0:1:0:1:0:1:0:1:0";
int msg_length=messageStr.length();
message = messageStr.getBytes();
System.out.println(messageStr + " " + message.length);
p = new DatagramPacket(message, msg_length, IPAddress, port);
s.send(p);
}
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
И клиент:
try {
String messageStr=message;
int server_port = port;
DatagramSocket s = new DatagramSocket();
InetAddress local = InetAddress.getByName(ipaddr);
int msg_length = messageStr.length();
byte[] message = messageStr.getBytes();
DatagramPacket p = new DatagramPacket(message, msg_length, local ,server_port);
s.send(p);
s.receive(p);
msg = new String(message, 0, p.getLength());
//print msg
s.close();
}
catch(Exception ex)
{
msg = ex.toString();
}
Однако я столкнулся с очень странной проблемой. Данные, полученные на стороне клиента, усекаются до 4 символов. Чтобы быть более точным, усекается до длины данных, которые изначально отправляются клиентом.
Что означает, что если я отправлю «DAT» вместо «DATA», он будет усечен до 3 символов вместо его первоначальной длины 23.
Есть идеи, что на самом деле пошло не так?
Я предполагаю, что размер буфера на некоторой стороне (достаточно забавно, я не могу понять, какая сторона) может быть установлен на длину первоначально отправленных / полученных данных.