java - UDP - 无法从 DatagramPacket 获取数据

标签 java android udp

我尝试通过 UDP 在 android 和 pc 之间发送和接收数据。 这是android中的代码:

String hostAddress = "10.0.2.2";
private static final int port = 2017;
DatagramSocket socket = null ;
InetAddress host;
String message = "hello";

@Override
public void run() {
    try {
        host = InetAddress.getByName(hostAddress);
        socket = new DatagramSocket();
        DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), host, port);
        socket.setBroadcast(true);
        while(true){
            socket.send(packet);
            Thread.sleep(5000);
        }
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (SocketException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

以及电脑中的代码:

DatagramSocket socket;
public final int port = 2017;
public ArrivedMessages(){
    try {
        socket = new DatagramSocket(port);
        System.out.println( "Ready!") ;
        byte inFromClient[];
        inFromClient = new byte[256];
        DatagramPacket packet = new DatagramPacket(inFromClient, inFromClient.length);
        while(true){
            socket.receive(packet);
            String data = new String(packet.getData());
            System.out.println(packet.getData().toString());
        }

    } catch (SocketException e1) {
        e1.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

但 PC 中的输出并不像 Android 代码中的消息那样“hello”。这是我的输出:[B@462d5aee 我应该做什么来修复它?谢谢!

最佳答案

String data = new String(packet.getData());

应该是:

String data = new String(packet.getData(), 0, packet.getLength());

System.out.println(packet.getData().toString());

应该是:

System.out.println(data);

否则,您只是打印长度不正确的字节数组的byte[].toString()

关于java - UDP - 无法从 DatagramPacket 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47011799/

相关文章:

c - udp - 多个服务器的客户端

java - session 在 ExecutorService 内部时关闭

设置中未显示键盘的 Android list

android 到 android 音频直播

java - 将值从公共(public)方法传递到私有(private)数组

java - 使用反射从父类(super class)中的子类中查找方法

networking - Winsock bind() 失败,WSAEADDRNOTAVAIL 用于定向广播地址

java - "Once-initialized"构造时未初始化的变量

java - 无法实例化 LinqMap 类型

java - Java 和 Python 之间不可变字符串连接的性能比较