Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Server.java
- import java.io.*;
- import java.net.InetSocketAddress;
- import java.nio.ByteBuffer;
- import java.nio.channels.SelectionKey;
- import java.nio.channels.Selector;
- import java.nio.channels.ServerSocketChannel;
- import java.nio.channels.SocketChannel;
- public final class Server {
- private static final int fib(final int number) {
- if (number < 3)
- return 1;
- var f = 1;
- var s = 1;
- for (int i = 3; i <= number; i++) {
- final var mem = s;
- s += f;
- f = mem;
- }
- return s;
- }
- public static final void main(final String[] args) throws IOException {
- final var server = ServerSocketChannel.open();
- server.socket().bind(new InetSocketAddress("127.0.0.1", 1337));
- server.configureBlocking(false);
- final var selector = Selector.open();
- server.register(selector, SelectionKey.OP_ACCEPT);
- while (true) {
- selector.select();
- final var it = selector.selectedKeys().iterator();
- while (it.hasNext()) {
- final var key = it.next();
- if (key.isAcceptable()) {
- final var client = server.accept();
- client.configureBlocking(false);
- client.register(selector, SelectionKey.OP_READ);
- } else if (key.isReadable()) {
- final var readBuffer = ByteBuffer.allocate(8);
- final var client = (SocketChannel) key.channel();
- if (client.read(readBuffer) < 0) {
- client.close();
- } else {
- readBuffer.flip();
- final var writeBuffer = ByteBuffer.allocate(8);
- writeBuffer.putInt(fib(readBuffer.getInt()));
- writeBuffer.flip();
- client.write(writeBuffer);
- }
- }
- it.remove();
- }
- }
- }
- }
- // Client.java
- import java.io.*;
- import java.net.InetSocketAddress;
- import java.nio.ByteBuffer;
- import java.nio.channels.SocketChannel;
- import static java.lang.System.out;
- public final class Client {
- public static final void main(final String[] args) throws IOException {
- final var client = SocketChannel.open();
- client.connect(new InetSocketAddress("127.0.0.1", 1337));
- try (final var reader = new BufferedReader(new InputStreamReader(System.in))) {
- out.println("Fibonacci number:");
- final var fibNum = Integer.parseInt(reader.readLine());
- final var writeBuffer = ByteBuffer.allocate(8);
- writeBuffer.putInt(fibNum);
- writeBuffer.flip();
- client.write(writeBuffer);
- final var readBuffer = ByteBuffer.allocate(8);
- client.read(readBuffer);
- readBuffer.flip();
- final var fibAns = readBuffer.getInt();
- out.println(fibAns);
- client.close();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment