2012-09-18 69 views
2

我需要從一個套接字傳入數據到一個ByteBuffer,我不知道該怎麼做。我是這個領域的新手,因此不確定開始的最佳方式。我發現了以下內容,但這不是我想要的,因爲它獲取了數據,但我需要將所有數據放在bytebuffer中用於其他目的。如何從TCP套接字獲取數據到一個ByteBuffer

ServerSocket welcomeSocket = new ServerSocket(Integer.parseInt(ibmPort)); 
while (true) { 
    Socket connectionSocket = welcomeSocket.accept();     
    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
    DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
    clientSentence = inFromClient.readLine(); 
    System.out.println("Received: " + clientSentence); 
    setRequestDataFromCT(clientSentence); 
    capitalizedSentence = clientSentence.toUpperCase() + '\n'; 
    outToClient.writeBytes(capitalizedSentence); 
} 
+0

您應該添加您正在使用的語言。對我來說,它看起來像Java,但我不知道。 – clentfort

+0

嗨,的確是java。 – user1372020

+0

您發佈的代碼使用Reader接口,它處理可讀的字符串而不是字節。那是你要的嗎? – pmoleri

回答

3

此代碼將讀取所有字節並將其存儲在一個字節緩衝區,你可能需要調整緩衝區大小的存儲所有你需要的數據。

int bufferSize = 8192; 
ServerSocket welcomeSocket = new ServerSocket(Integer.parseInt(ibmPort)); 
while (true) { 
    Socket connectionSocket = welcomeSocket.accept(); 
    ByteBuffer bf = ByteBuffer.allocate(bufferSize); 
    BufferedInputStream inFromClient = new BufferedInputStream(connectionSocket.getInputStream()); 
    while (true) { 
     int b = inFromClient.read(); 
     if (b == -1) { 
      break; 
     } 
     bf.put((byte) b); 
    } 
    connectionSocket.close(); 
} 
+0

非常感謝。我也只是在一分鐘前找到一個類似的方法。我也在這裏發佈,因爲它可能有用。 – user1372020

-1
 ServerSocket welcomeSocket = new ServerSocket(Integer.parseInt(ibmPort)); 
     while (true) { 
      Socket connectionSocket = welcomeSocket.accept(); 
      InputStream stream = connectionSocket.getInputStream(); 
      byte[] data = new byte[1024]; 
      int count = stream.read(data); 
      ByteBuffer bb = ByteBuffer.allocate(data.length); 
      bb.put(data); 
      bb.flip(); 
     } 
+1

小心,不能保證讀取方法會一次讀取所有數據,它可以返回一部分數據以便接收。確實如此, – pmoleri

+0

。謝謝 – user1372020

+0

(-1,如果我被允許) 你不應該在while循環內調用allocate() – Alastair

2

int count = SocketChannel.read(ByteBuffer).不知道爲什麼你,如果你沒有使用SocketChannels添加「的SocketChannel」的標籤,但是這是如何做到這一點。