2014-06-06 33 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