2015-01-17 5 views
-1

작은 파이썬 스크립트를 Java로 변환하려고합니다. 꽤 간단합니다. UDP 포트로 데이터를 보내고 그 결과를 봅니다. 나는 파이썬 사람이 아니에요, 너무 많은 소켓 프로그래밍을하지 않은,하지만 난 한 줄을 제외한 모든의 번역을 알아 냈어요 :Python을 Java로 번역하십시오.

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

enccmd이었다 명령을 포함하는 문자열입니다 이전에 인코딩 됨/

전송할 데이터 패킷을 작성 중입니다. 이것이 DatagramPacket 객체의 생성으로 변환된다는 것을 알고 있습니다. 어떻게 해야할지 모르겠습니다.

아무도 도와 줄 수 있습니까?

답변

0

sth입니까? 같은 :

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

을 나는 그가 패킷을 구성 않는 방법을 의미한다고 생각? (그의 바이트 배열). –

+0

그래, 그게 내 문제 야. 소켓을 통해 데이터를 전달하는 방법을 알고 있습니다. 페이로드 형식을 지정하는 방법을 알 수 없습니다. 어떻게 파이썬 코드가하고있는 것을 따르기 위해 DatagramPacket을 구현합니까? –

+0

이것은 내가 필요한 것입니다. 몇 가지 문제 : 첫째, "\ 0x0c \ 0x15 \ 0x33 \ 0x00"을 원하지 않으므로 바이트를 얻을 수 있습니까? 둘째, 성명서의 두 번째 부분을 무시했습니다. 바로 그 부분이 정말로 털이 있습니다. 어떻게 그걸합니까? –