Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions SimpleFTP/.idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions SimpleFTP/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions SimpleFTP/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions SimpleFTP/.idea/modules/ClientGUI/ClientGUI.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions SimpleFTP/.idea/modules/FTPClient/FTPClient.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions SimpleFTP/.idea/modules/FTPClient/FTPClient_main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions SimpleFTP/.idea/modules/FTPClient/FTPClient_test.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions SimpleFTP/.idea/modules/FTPServer/FTPServer.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions SimpleFTP/.idea/modules/FTPServer/FTPServer_main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions SimpleFTP/.idea/modules/FTPServer/FTPServer_test.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 13 additions & 0 deletions SimpleFTP/.idea/modules/SimpleFTP.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions SimpleFTP/.idea/modules/SimpleFTP_main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions SimpleFTP/.idea/modules/SimpleFTP_test.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions SimpleFTP/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions SimpleFTP/FTPClient/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
group 'ru.spbau.dkaznacheev'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package ru.spbau.dkaznacheev.simpleftp;

import java.io.*;
import java.net.ConnectException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {

/**
* Downloads a file from sever
* @param in inputstream of a socket
* @param name name of the file
*/
private static void receiveFile(DataInputStream in, String name) throws IOException{
long length = in.readLong();
if (length == 0) {
System.out.println("No such file");
return;
}
try (FileOutputStream out = new FileOutputStream(simpleName(name))) {
byte[] buffer = new byte[4096];
long remaining = length;
int read;
while ((read = in.read(buffer, 0, (int) Math.min(buffer.length, remaining))) > 0) {
remaining -= read;
out.write(buffer);
}
}
}

/**
* Returns simple file name of the filepath.
* @param path path to file
* @return filename
*/
private static String simpleName(String path) {
return new File(path).getName();
}

public static void main(String[] args) {
try (
Socket socket = new Socket("127.0.0.1", 8080);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
DataInputStream in = new DataInputStream(socket.getInputStream());
Scanner stdIn = new Scanner(System.in)
) {
ResponseCode fromServer;
String fromUser;
boolean exit = false;
while (!exit) {
fromUser = stdIn.nextLine();
if (fromUser != null) {
out.println(fromUser);
}
fromServer = ResponseCode.values()[in.readInt()];
switch (fromServer) {
case CLOSE_CONNECTION: {
exit = true;
break;
}
case INVALID_COMMAND: {
System.out.println("Invalid command");
break;
}
case FOLDER_DESCRIPTION: {
FolderDescription description = FolderDescription.read(in);
description.print();
break;
}
case FILE_SEND: {
String[] parts = fromUser.split(" ");
receiveFile(in, parts[1]);
break;
}
}
}

} catch (UnknownHostException e) {
System.err.println("Unknown host");
} catch (ConnectException e) {
System.err.println("Connection refused");
} catch (IOException e) {
e.printStackTrace();
}
}
}

14 changes: 14 additions & 0 deletions SimpleFTP/FTPServer/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
group 'ru.spbau.dkaznacheev'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
Loading