1

我正在尝试编写一个关于 UDP Connections 的简单程序来了解它们。我已经实现了一些基本的东西,但是当我尝试发送并取回我发送的内容时,我遇到了一些问题,例如,

当我这样做时;发送一个字符串

“asd”到服务器我得到了 asdxxxxxxxxxxxx,当我尝试打印我在服务器中得到的内容时,我得到 [B@5f186fab

我怎么解决这个问题 ?

为了更清楚,我向您发送了几行代码,

在客户端;

Scanner in = new Scanner(System.in);
    String result = in.nextLine();
        // send request
    byte[] buf = new byte[1000];
    String read = result;
    InetAddress address = InetAddress.getByName("localhost");
    DatagramPacket packet = new DatagramPacket(result.getBytes(),  result.getBytes().length, address, 4445);
    socket.send(packet);

        // get response
    packet = new DatagramPacket(buf, buf.length);
    socket.receive(packet);

    // display response
    String received = new String(packet.getData(), 0, packet.getLength());
    System.out.println("Quote of the Moment: " + received);

在服务器中;

            byte[] buf = new byte[1000];
            DatagramPacket packet = new DatagramPacket(buf, buf.length);
            socket.receive(packet);
            byte[] received = packet.getData();
            System.out.println(received.toString());

                // figure out response

        // send the response to the client at "address" and "port"
            InetAddress address = packet.getAddress();
            int port = packet.getPort();
            packet = new DatagramPacket(received, received.length, address, port);
            socket.send(packet);

谢谢你们

编辑 1 我认为我的缓冲区有问题,但我不知道如何解决。

4

2 回答 2

2

您可以使用

System.out.println(Arrays.toString(received));

但你可能想要的是

System.out.println(new String(received, o, lengthRead, "UTF-8"));
于 2011-09-22T11:08:32.953 回答
0

你修好了吗?

否则,我发现如果您声明的接收byte[] buf容量大于实际接收的长度字符串,则缓冲区的其余部分将充满不需要的字节。

例如。如果你声明byte[] received = new byte[1000];但只收到一个 4 字节的字符串,你最终会得到 996 个不需要的字节。

解决此问题的一种快速方法是执行类似的操作

byte[] received = packet.getData();
System.out.println(received.toString().trim());

trim()为我做了伎俩。希望对你有帮助!

于 2013-03-16T06:41:54.303 回答