2014-06-06 32 views
0

我試圖連接到vortex.labs.overthewire.org上的端口5842,並在主機字節順序中讀入4個無符號整數。服務器vortex.labs.overthewire.orgis在一個32位的x86機器上(意思是一個小端的架構) 在Java中可以這樣嗎?以小端字節順序從套接字讀取無符號整數

Socket socket = new Socket("vortex.labs.overthewire.org", 5842); 
InputStream in = socket.getInputStream(); 
int c; 
while((c=in.read())!=-1){ 
    System.out.println((byte)c); 
} 

回答

1

整數可能會作爲來自32位系統的四個字節值發送。所以,你需要閱讀四個字節到一個數組,然後再轉換爲一個int:

Socket socket = new Socket("vortex.labs.overthewire.org", 5842); 
DataInputStream in = new DataInputStream(socket.getInputStream()); 

byte[] intData = new byte[4]; 

for (int i = 0; i < 4; i++) { 
    in.readFully(intData); 
    System.out.println(ByteBuffer.wrap(intData) 
      .order(ByteOrder.LITTLE_ENDIAN).getInt()); 
} 

相關:How can I convert a 4-byte array to an integer?

0

你是對的。你提到你想讀4個整數。也許這將是最好使用一個for循環:

byte[] bytes; 
for (int i=0; i<4; i++) { 
    bytes = new byte[4]; 
    for (int j=0; j<4; j++) { 
     bytes[j] = (byte) in.read(); 
    } 
    int x = java.nio.ByteBuffer.wrap(bytes).order(java.nio.ByteOrder.LITTLE_ENDIAN).getInt(); 
    System.out.println(x); 
} 

另外,不要忘了close輸入流。

+0

一個整數=一個字節 –

+0

這將讀取4個字節,在OP大概需要組裝那些4個字節以小端格式轉換爲32位整數。並做4次。 – nos