2

ソケットから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);
}
4

3 に答える 3

4

このコードはすべてのバイトを読み取り、それらをByteBufferに格納します。必要なすべてのデータを格納するために、bufferSizeを調整する必要がある場合があります。

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();
}
于 2012-09-18T16:34:25.700 に答える
2

int count = SocketChannel.read(ByteBuffer).を使用していないのに「socketchannel」タグを追加した理由はわかりませんSocketChannelsが、これがその方法です。

于 2012-09-18T23:59:48.673 に答える
-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();
        }
于 2012-09-18T16:49:33.673 に答える