diff --git a/src/main/java/koz01/java2/lab08/IndexReader.java b/src/main/java/koz01/java2/lab08/IndexReader.java
index 8ae3d5279801f840144d6c162792bc8cf9a2866e..8ac37e9704e92b947476f871be686a0cc49ed5b7 100644
--- a/src/main/java/koz01/java2/lab08/IndexReader.java
+++ b/src/main/java/koz01/java2/lab08/IndexReader.java
@@ -35,6 +35,17 @@ public class IndexReader {
 
 	}
 
+	public byte[] readData(int index) {
+		try (FileChannel fc = FileChannel.open(getFile())) {
+			return getData(fc, index);
+
+		}
+		catch (IOException exc) {
+			log.error("read", exc);
+			return null;
+		}
+	}
+
 	private Path getFile() throws IOException {
 		Path LocalFile = Files.createTempFile(null, null).getParent().resolve(
 			IMAGE_NAME);
@@ -56,6 +67,26 @@ public class IndexReader {
 	}
 
 	private byte[] getData(FileChannel fc, int index) throws IOException {
+		// 0 .. 3 - number of images
+		// 4 .. 7 - position of image data file
+		// 9 .. 11 - number of bytes of image data
+
+		// position_in_index := 4 + index * 8
+		ByteBuffer bb = ByteBuffer.allocate(8);
+		fc.position(4 + index * 8);
+		while (bb.hasRemaining()) {
+			fc.read(bb);
+		}
+		bb.flip();
+		int positionOfData = bb.getInt();
+		int legthOfData = bb.getInt();
+
+		// position_of_data := readInt(position_in_index)
+		// length_of_data := readInt(position_in_index + 4)
+		// data := readData(position_of_data, length_of_data)
+		// return data
+		// bb.array()
+
 		return new byte[0];
 	}
 }
diff --git a/src/main/java/koz01/java2/lab08/RemoteServer.java b/src/main/java/koz01/java2/lab08/RemoteServer.java
new file mode 100644
index 0000000000000000000000000000000000000000..98a461a90346cb3841567af788129f301926ebcc
--- /dev/null
+++ b/src/main/java/koz01/java2/lab08/RemoteServer.java
@@ -0,0 +1,51 @@
+package koz01.java2.lab08;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+import java.util.Iterator;
+import java.util.Set;
+
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+public class RemoteServer {
+
+	public static void main(String[] args) throws IOException
+	{
+		int port = Integer.parseInt(args[0]);
+		Selector selector = Selector.open();
+		// open server socket channel on given port
+		ServerSocketChannel sc = ServerSocketChannel.open();
+		sc.bind(new InetSocketAddress(port));
+		sc.configureBlocking(false);
+		sc.register(selector, SelectionKey.OP_ACCEPT);
+		log.info("Server started and waiting connection on port {}", port);
+		while (true) {
+			selector.select();
+			Set<SelectionKey> selectedKeys = selector.selectedKeys();
+			Iterator<SelectionKey> iterator = selectedKeys.iterator();
+			while (iterator.hasNext()) {
+				SelectionKey sk = iterator.next();
+				if (sk.channel() == sc) {
+					SocketChannel channel = sc.accept();
+					log.info("client connected {}", channel.getRemoteAddress());
+					// register channel to selector
+				}
+				else {
+					SocketChannel channel = (SocketChannel) sk.channel();
+					// read index of image (int)
+					int index = 0;
+					byte[] data = new IndexReader().readData(index);
+					// write(send) size of data
+					// write(send) data
+				}
+
+				iterator.remove();
+			}
+		}
+	}
+}