收到Java UDP截断数据

时间:2019-01-10 19:37:53

标签: java udp

我正在用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。

您知道实际上可能出了什么问题吗?

我猜测缓冲区的大小(很有趣,我无法弄清哪一侧)可能设置为最初发送/接收的数据的长度。

0 个答案:

没有答案