我正在用Java做一个简单的UDP客户端和服务器应用程序。
我将“ DATA”从客户端发送到服务器。服务器应该向客户端发送长度为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。
您知道实际上可能出了什么问题吗?
我猜测缓冲区的大小(很有趣,我无法弄清哪一侧)可能设置为最初发送/接收的数据的长度。