首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UDP接收和发送UDP包的问题?

UDP接收和发送UDP包的问题?
EN

Stack Overflow用户
提问于 2011-09-22 10:58:43
回答 2查看 3.2K关注 0票数 1

我试图编写一个关于UDP连接的简单程序来了解它们。我已经实现了一些基本的东西,但是当我试图发送和收回我发送的东西时,我面临着一些问题,比如,

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

"asd“到服务器,我得到asdxxxxxxxxxx,当我试图打印在服务器上得到的东西时,我得到[B@5f186fab ]。

我该如何解决这个问题?

更清楚的是,我给你发了几行代码,

在客户中;

代码语言:javascript
复制
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);

在服务器中;

代码语言:javascript
复制
            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我想我的缓冲区有问题,但我不知道如何解决。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-22 11:08:32

您可以使用

代码语言:javascript
复制
System.out.println(Arrays.toString(received));

但你想要的是

代码语言:javascript
复制
System.out.println(new String(received, o, lengthRead, "UTF-8"));
票数 2
EN

Stack Overflow用户

发布于 2013-03-16 06:41:54

你修好这个了吗?

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

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

解决这个问题的一个快速方法是做一些类似的事情

代码语言:javascript
复制
byte[] received = packet.getData();
System.out.println(received.toString().trim());

trim()为我做了这个把戏。希望这对你有帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7513661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档