paranid5

poll 1

Aug 5th, 2021
628
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Server.java
  2.  
  3. import java.io.*;
  4. import java.net.InetSocketAddress;
  5. import java.nio.ByteBuffer;
  6. import java.nio.channels.SelectionKey;
  7. import java.nio.channels.Selector;
  8. import java.nio.channels.ServerSocketChannel;
  9. import java.nio.channels.SocketChannel;
  10.  
  11. public final class Server {
  12.     private static final int fib(final int number) {
  13.         if (number < 3)
  14.             return 1;
  15.  
  16.         var f = 1;
  17.         var s = 1;
  18.  
  19.         for (int i = 3; i <= number; i++) {
  20.             final var mem = s;
  21.             s += f;
  22.             f = mem;
  23.         }
  24.  
  25.         return s;
  26.     }
  27.  
  28.     public static final void main(final String[] args) throws IOException {
  29.         final var server = ServerSocketChannel.open();
  30.         server.socket().bind(new InetSocketAddress("127.0.0.1", 1337));
  31.         server.configureBlocking(false);
  32.  
  33.         final var selector = Selector.open();
  34.         server.register(selector, SelectionKey.OP_ACCEPT);
  35.  
  36.         while (true) {
  37.             selector.select();
  38.             final var it = selector.selectedKeys().iterator();
  39.  
  40.             while (it.hasNext()) {
  41.                 final var key = it.next();
  42.  
  43.                 if (key.isAcceptable()) {
  44.                     final var client = server.accept();
  45.                     client.configureBlocking(false);
  46.                     client.register(selector, SelectionKey.OP_READ);
  47.                 } else if (key.isReadable()) {
  48.                     final var readBuffer = ByteBuffer.allocate(8);
  49.                     final var client = (SocketChannel) key.channel();
  50.  
  51.                     if (client.read(readBuffer) < 0) {
  52.                         client.close();
  53.                     } else {
  54.                         readBuffer.flip();
  55.                         final var writeBuffer = ByteBuffer.allocate(8);
  56.                         writeBuffer.putInt(fib(readBuffer.getInt()));
  57.                         writeBuffer.flip();
  58.                         client.write(writeBuffer);
  59.                     }
  60.                 }
  61.  
  62.                 it.remove();
  63.             }
  64.         }
  65.     }
  66. }
  67.  
  68. // Client.java
  69.  
  70. import java.io.*;
  71. import java.net.InetSocketAddress;
  72. import java.nio.ByteBuffer;
  73. import java.nio.channels.SocketChannel;
  74. import static java.lang.System.out;
  75.  
  76. public final class Client {
  77.     public static final void main(final String[] args) throws IOException {
  78.         final var client = SocketChannel.open();
  79.         client.connect(new InetSocketAddress("127.0.0.1", 1337));
  80.  
  81.         try (final var reader = new BufferedReader(new InputStreamReader(System.in))) {
  82.             out.println("Fibonacci number:");
  83.             final var fibNum = Integer.parseInt(reader.readLine());
  84.  
  85.             final var writeBuffer = ByteBuffer.allocate(8);
  86.             writeBuffer.putInt(fibNum);
  87.             writeBuffer.flip();
  88.             client.write(writeBuffer);
  89.  
  90.             final var readBuffer = ByteBuffer.allocate(8);
  91.             client.read(readBuffer);
  92.             readBuffer.flip();
  93.             final var fibAns = readBuffer.getInt();
  94.  
  95.             out.println(fibAns);
  96.             client.close();
  97.         }
  98.     }
  99. }
RAW Paste Data