У меня проблема с SocketChannel в клиент-серверном Java-приложении.
На сервере, прежде всего, я инициализирую селектор:
Selector selector = null;
try{
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(5000));
serverSocketChannel.configureBlocking(false);
selector = Selector.open();
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
} catch(IOException e){
e.printStackTrace();
return;
}
А потом я начинаю некоторое время:
while(true) {
try {
selector.select();
} catch (IOException ex) {
ex.printStackTrace();
break;
}
Set<SelectionKey> readyKeys = selector.selectedKeys();
Iterator<SelectionKey> iterator = readyKeys.iterator();
while (iterator.hasNext()) {
SelectionKey key = iterator.next();
iterator.remove();
try {
if (key.isAcceptable()) {
ServerSocketChannel server = (ServerSocketChannel) key.channel();
SocketChannel clientChannel = server.accept();
clientChannel.configureBlocking(false);
clientChannel.register(selector, SelectionKey.OP_READ);
} else if (key.isReadable()) {
readFunction((SocketChannel)key.channel())
}
}
}
Теперь я должен разработать функцию чтения. Я хотел бы передавать данные между клиентом и сервером с помощью строки (Json), но поскольку они не блокируются, я не знаю, смогу ли я это сделать, не отправив размер строки перед строкой.
Может ли кто-нибудь мне помочь?