Ситуация такова, что у меня есть сервер, который прослушивает соединения и использует селектор, клиент подключается и отправляет строку, сервер получает ее и отправляет другую строку клиенту, после чего клиент завершается.
Сервер правильно принимает строку, отправленную клиентом, и отправляет ее строку, но в этот момент клиент входит в бесконечный цикл, выполняет read (), но это так, как если бы он не мог взять данные из буфера, фактическиСтрока всегда пуста, как я могу это сделать?
Код сервера
ByteBuffer buf = ByteBuffer.allocate(1024);
buf.rewind();
StringBuilder tmp = new StringBuilder();
while(client.read(buf)>0) {
buf.flip();
while(buf.hasRemaining()) {
tmp.append((char) buf.get());
}
buf.clear();
}
System.out.println("String received " + tmp.getBytes());
String string = "hello"
buf.rewind();
buf.put(string.getBytes());
while(buf.hasRemaining()) {
client.write(buf);
}
buf.clear();
System.out.println("Sending complete.");
Код клиента
ByteBuffer buf = ByteBuffer.allocate(1024);
buf.put(message.getBytes());
buf.flip();
while(buf.hasRemaining()) {
socket.write(buf);
}
buf.clear();
StringBuilder string = new StringBuilder();
buf.rewind();
while(socket.read(buf)>0){
//the client read something cause execute these commands
buf.flip();
while(buf.hasRemaining()) {
//then enter in this infinite loop
string.append((char) buf.get());
//It only prints "Read: " no sing of the rest of the string
System.out.println("Read: " +string.toString());
}
buf.clear();
}
System.out.println("Client has received: " + string.toString());