有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将Python翻译成Java

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

packet = (b'\x0C\x15\x33\x00' + os.urandom(4) + (b'\x00' * 38) + struct.pack('<H', len(enccmd)) + enccmd).ljust(512, b'\x00')

enccmd是一个字符串,其中包含以前编码的命令/

这是在构建要发送的数据包。我知道这会转化为一个DatagramPacket对象的创建,我只是不知道怎么做

有人能帮忙吗


共 (1) 个答案

  1. # 1 楼答案

    你是说:

     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);
        }