将Python翻译成Java

将Python翻译成Java,java,python,sockets,udp,datagram,Java,Python,Sockets,Udp,Datagram,我正在尝试将一个小Python脚本翻译成Java。它非常简单-它将一些数据发送到UDP端口并查看结果。我不是Python爱好者,也没有做过太多的套接字编程,但我已经解决了所有问题的翻译,除了一行: packet=(b'\x0C\x15\x33\x00'+os.urandom(4)+(b'\x00'*38)+struct.pack(“你的意思是: try { InetAddress ia; ia = InetAddress.getByName("localhost

我正在尝试将一个小Python脚本翻译成Java。它非常简单-它将一些数据发送到UDP端口并查看结果。我不是Python爱好者,也没有做过太多的套接字编程,但我已经解决了所有问题的翻译,除了一行:

packet=(b'\x0C\x15\x33\x00'+os.urandom(4)+(b'\x00'*38)+struct.pack(“你的意思是:

 try {
        InetAddress ia;
        ia = InetAddress.getByName("localhost");
        int port = 12345;
        String s = "Hello-World!";
        byte[] data = s.getBytes();
        DatagramPacket packet = new DatagramPacket(data, data.length, ia, port);
        DatagramSocket toSocket = new DatagramSocket();
        toSocket.send(packet);
    } catch (SocketException ex) {
        Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
    } catch (UnknownHostException ex) {
        Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
    }

要生成字节[],可以使用:

try {
        ByteArrayOutputStream byte_array_output_stream = new ByteArrayOutputStream();
        DataOutputStream data_output_stream = new DataOutputStream(byte_array_output_stream);
        data_output_stream.writeBytes("\u000c\u0015\u0033\u0000");
        byte[] b = new byte[4];
        new SecureRandom().nextBytes(b);
        data_output_stream.write(b);
        for (int i = 0; i < 38; i++) {
            data_output_stream.writeBytes("\u0000");
        }
        data_output_stream.flush();
        byte[] array = byte_array_output_stream.toByteArray();
        JOptionPane.showMessageDialog(null, Arrays.toString(array));
    } catch (IOException ex) {
        Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
    }
试试看{
ByteArrayOutputStream字节\数组\输出\流=新建ByteArrayOutputStream();
DataOutputStream数据\输出\流=新的DataOutputStream(字节\数组\输出\流);
数据输出流写入字节(“\u000c\u0015\u0033\u0000”);
字节[]b=新字节[4];
新SecureRandom().nextBytes(b);
数据输出流写入(b);
对于(int i=0;i<38;i++){
数据输出流写入字节(“\u0000”);
}
数据_输出_stream.flush();
字节[]数组=字节\数组\输出\流。toByteArray();
showMessageDialog(null,Arrays.toString(array));
}捕获(IOEX异常){
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE,null,ex);
}

我想他指的是如何构造数据包?(他的字节数组)。是的,这是我的问题。我知道如何通过套接字传送数据。我不知道如何格式化有效负载。如何构建DatagramPacket以符合Python代码的操作?这是我需要的。有几个问题:首先,我们不想要吗“\0x0c\0x15\0x33\0x00”这样我们就得到了字节?其次,您忽略了语句的整个第二部分,这是真正令人毛骨悚然的地方。您是如何做到的?