From a53b851e1f5f30d81a72e088677dd1647b5b49b2 Mon Sep 17 00:00:00 2001 From: XJIE6 Date: Mon, 14 Mar 2016 23:45:34 +0300 Subject: [PATCH] hw3 added --- .gitignore | 3 + src/main/java/ru/spbau/mit/hw3/Client.java | 43 ++++++++++++ .../java/ru/spbau/mit/hw3/MainClient.java | 48 +++++++++++++ .../java/ru/spbau/mit/hw3/MainServer.java | 30 +++++++++ src/main/java/ru/spbau/mit/hw3/Server.java | 67 +++++++++++++++++++ 5 files changed, 191 insertions(+) create mode 100644 .gitignore create mode 100644 src/main/java/ru/spbau/mit/hw3/Client.java create mode 100644 src/main/java/ru/spbau/mit/hw3/MainClient.java create mode 100644 src/main/java/ru/spbau/mit/hw3/MainServer.java create mode 100644 src/main/java/ru/spbau/mit/hw3/Server.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..883ea48 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea/ +target/ +/*.iml \ No newline at end of file diff --git a/src/main/java/ru/spbau/mit/hw3/Client.java b/src/main/java/ru/spbau/mit/hw3/Client.java new file mode 100644 index 0000000..79c2fb5 --- /dev/null +++ b/src/main/java/ru/spbau/mit/hw3/Client.java @@ -0,0 +1,43 @@ +package ru.spbau.mit.hw3; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; + +/** + * Created by YuryKravchenko on 14/03/16. + */ +public class Client{ + + Socket socket; + DataInputStream in; + DataOutputStream out; + + public Client() throws IOException { + socket = new Socket("127.0.0.1", 12345); + in = new DataInputStream(socket.getInputStream()); + out = new DataOutputStream(socket.getOutputStream()); + } + + public String List(String path) throws IOException { + out.writeInt(1); + out.writeUTF(path); + int count = in.readInt(); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < count; ++i) { + builder.append(in.readUTF()).append(' ').append(in.readBoolean()).append('\n'); + } + return builder.toString(); + } + + public String Get(String s) throws IOException { + out.writeInt(2); + out.writeUTF(s); + Long size = in.readLong(); + byte[] file = new byte[size.intValue()]; + in.read(file, 0, size.intValue()); + return file.toString(); + } + +} diff --git a/src/main/java/ru/spbau/mit/hw3/MainClient.java b/src/main/java/ru/spbau/mit/hw3/MainClient.java new file mode 100644 index 0000000..d44e842 --- /dev/null +++ b/src/main/java/ru/spbau/mit/hw3/MainClient.java @@ -0,0 +1,48 @@ +package ru.spbau.mit.hw3; + +import java.io.IOException; +import java.util.Scanner; + +/** + * Created by YuryKravchenko on 14/03/16. + */ +public class MainClient { + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + Client client = null; + while (true) { + String cmd = in.nextLine(); + switch (cmd) { + case "connect": + try { + client = new Client(); + } catch (IOException e) { + System.out.println("starting client failed, try again"); + } + break; + case "executeList": + cmd = in.nextLine(); + try { + System.out.println(client.List(cmd)); + } catch (IOException e) { + System.out.println("connection failed"); + } catch (NullPointerException e) { + System.out.println("no connection"); + } + break; + case "executeGet": + cmd = in.nextLine(); + try { + System.out.println(client.Get(cmd)); + } catch (IOException e) { + System.out.println("connection failed"); + } catch (NullPointerException e) { + System.out.println("no connection"); + } + break; + case "disconnect": + return; + } + } + } +} diff --git a/src/main/java/ru/spbau/mit/hw3/MainServer.java b/src/main/java/ru/spbau/mit/hw3/MainServer.java new file mode 100644 index 0000000..0b190e1 --- /dev/null +++ b/src/main/java/ru/spbau/mit/hw3/MainServer.java @@ -0,0 +1,30 @@ +package ru.spbau.mit.hw3; + +import java.io.IOException; +import java.util.Scanner; + +/** + * Created by YuryKravchenko on 14/03/16. + */ +public class MainServer { + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + while (true) { + String cmd = in.nextLine(); + try { + switch (cmd) { + case "start": + Thread newThread = new Thread(new Server()); + newThread.setDaemon(true); + newThread.start(); + break; + case "stop": + return; + } + } catch (IOException e) { + System.out.println("starting server failed, try again"); + return; + } + } + } +} diff --git a/src/main/java/ru/spbau/mit/hw3/Server.java b/src/main/java/ru/spbau/mit/hw3/Server.java new file mode 100644 index 0000000..a1eb858 --- /dev/null +++ b/src/main/java/ru/spbau/mit/hw3/Server.java @@ -0,0 +1,67 @@ +package ru.spbau.mit.hw3; + +import java.io.*; +import java.net.ServerSocket; +import java.net.Socket; + +/** + * Created by YuryKravchenko on 14/03/16. + */ +public class Server implements Runnable { + + ServerSocket socket; + DataInputStream in; + DataOutputStream out; + + public Server() throws IOException { + socket = new ServerSocket(12345); + } + + @Override + public void run() { + try { + Socket socket = this.socket.accept(); + in = new DataInputStream(socket.getInputStream()); + out = new DataOutputStream(socket.getOutputStream()); + } catch (IOException e) { + System.out.println("connection error"); + return; + } + try { + while (true) { + int cmd = in.readInt(); + String path = in.readUTF(); + switch (cmd) { + case 1: + if (!new File(path).exists()) { + out.writeInt(0); + break; + } + out.writeInt(new File(path).listFiles().length); + for (File f : new File(path).listFiles()) { + out.writeUTF(f.getName()); + out.writeBoolean(f.isDirectory()); + } + out.flush(); + break; + case 2: + if (!new File(path).exists() || new File(path).isDirectory()) { + out.writeInt(0); + break; + } + DataInputStream file = new DataInputStream(new FileInputStream(path)); + Long length = new File(path).length(); + out.writeLong(length); + byte[] b = new byte[length.intValue()]; + file.read(b); + out.write(b); + out.flush(); + break; + } + } + } catch (IOException e) { + System.out.println("connection failed"); + return; + } + } +}