I need to get incoming data from a socket into a ByteBuffer and I do not know how to do it. I am new to this field and therefore not sure of the best way to start. I found the following but that is not what I want as it gets the data in line but I need to have all of my data in bytebuffer for other purposes.
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);
}
This code will read all the bytes and store them in a ByteBuffer, you may have to adjust the bufferSize to store all the data you need.
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();
}
int count = SocketChannel.read(ByteBuffer).
Not sure why you added the 'socketchannel' tag if you weren't using SocketChannels
, but this is how to do it.
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();
}
来源:https://stackoverflow.com/questions/12478845/how-to-get-data-from-tcp-socket-into-a-bytebuffer