Please enter the commit message for your changes. Lines starting
with '#' will be ignored, and an empty message aborts the commit. Committer: Michał Jankowski <s449303@labs.wmi.amu.edu.pl> On branch master Initial commit Changes to be committed: new file: filestorage-client/.gitignore new file: filestorage-client/CMakeLists.txt new file: filestorage-client/Makefile new file: filestorage-client/README.md new file: filestorage-client/main.c new file: filestorage-client/panobrazek.jpg new file: filestorage-server/.gitignore new file: filestorage-server/README.md new file: filestorage-server/src/Connection.java new file: filestorage-server/src/Server.java new file: filestorage-server/storage/basquiat.jpg
This commit is contained in:
commit
76bb7c79e2
3
filestorage-client/.gitignore
vendored
Normal file
3
filestorage-client/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.idea
|
||||
cmake-build-debug
|
||||
client
|
6
filestorage-client/CMakeLists.txt
Normal file
6
filestorage-client/CMakeLists.txt
Normal file
@ -0,0 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
project(untitled C)
|
||||
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
add_executable(untitled main.c)
|
2
filestorage-client/Makefile
Normal file
2
filestorage-client/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
install:
|
||||
gcc -o client main.c
|
15
filestorage-client/README.md
Normal file
15
filestorage-client/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# FileStorage-Client
|
||||
|
||||
Instalacja rewelacja klienta
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
make install
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
./client <server-ip> <server-port>
|
||||
```
|
123
filestorage-client/main.c
Normal file
123
filestorage-client/main.c
Normal file
@ -0,0 +1,123 @@
|
||||
#include <sys/socket.h>
|
||||
#include <stdio.h>
|
||||
#include <netinet/in.h>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <unistd.h>
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
|
||||
#define BUFFER_SIZE 1024
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
char ipAddress[512];
|
||||
char buffer[BUFFER_SIZE];
|
||||
char fileName[255];
|
||||
uint32_t buffer_size;
|
||||
struct sockaddr_in adr;
|
||||
FILE *file;
|
||||
unsigned int port;
|
||||
int gniazdo;
|
||||
long fileSize;
|
||||
ssize_t bytesRead;
|
||||
size_t nread;
|
||||
|
||||
if (argc >= 2) {
|
||||
strcpy(ipAddress, argv[1]);
|
||||
port = atoi(argv[2]);
|
||||
} else {
|
||||
printf("Przyklad: ./client <host-ip-addr> <port>");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
gniazdo = socket(PF_INET, SOCK_STREAM, 0);
|
||||
adr.sin_family = AF_INET;
|
||||
adr.sin_port = htons(port);
|
||||
adr.sin_addr.s_addr = inet_addr(ipAddress);
|
||||
|
||||
if (connect(gniazdo, (struct sockaddr *) &adr,
|
||||
sizeof(adr)) < 0) {
|
||||
printf("You did smth wrong, nie moge sie polaczyc!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Czesc! Ponizej masz liste dostpenych komend:\n"
|
||||
"/ls - lista plikow\n"
|
||||
"/rm <nazwa> - usun plik\n"
|
||||
"/send <sciezka-do-pliku> - wyslij plik na dana sciezke\n"
|
||||
"/exit - wyjdz\n" );
|
||||
|
||||
fflush(stdout);
|
||||
|
||||
while (1) {
|
||||
printf("Wpisz komende: ");
|
||||
memset(buffer, 0, BUFFER_SIZE*sizeof(char));
|
||||
|
||||
//wczytywanie
|
||||
fgets(buffer, 1024, stdin);
|
||||
|
||||
//wysylka na serwer
|
||||
buffer_size = htonl(BUFFER_SIZE);
|
||||
write(gniazdo, &buffer_size, sizeof(buffer_size));
|
||||
send(gniazdo, buffer, BUFFER_SIZE, 0);
|
||||
|
||||
if (strncmp(buffer, "/exit", 5) == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (strncmp(buffer, "/send", 5) == 0) {
|
||||
strncpy(fileName, buffer+6, 255);
|
||||
strtok(fileName, "\n");
|
||||
printf("Wysylam! '%s'\n", fileName);
|
||||
file = fopen(fileName, "r");
|
||||
if (file) {
|
||||
// rozmiar pliku
|
||||
fseek(file, 0 , SEEK_END);
|
||||
fileSize = ftell(file);
|
||||
fseek(file, 0 , SEEK_SET);// sluzy do pobierania poczatku pliku
|
||||
printf("It has %ld bytes.\n", fileSize);
|
||||
|
||||
buffer_size = 0;
|
||||
buffer_size = htonl((uint32_t)fileSize);
|
||||
|
||||
write(gniazdo, &buffer_size, sizeof(buffer_size));
|
||||
|
||||
memset(buffer, 0, BUFFER_SIZE*sizeof(char));
|
||||
int progress = 0;
|
||||
while ((nread = fread(buffer, 1, sizeof buffer, file)) > 0) {
|
||||
progress += nread;
|
||||
printf("\rSending %d/%ld",progress, fileSize);
|
||||
send(gniazdo, buffer, nread, 0);
|
||||
}
|
||||
printf("\n");
|
||||
if (ferror(file)) {
|
||||
printf("Error with file!");
|
||||
close(gniazdo);
|
||||
exit(1);
|
||||
}
|
||||
fclose(file);
|
||||
}
|
||||
}
|
||||
|
||||
// odczytaj odpowiedz
|
||||
printf("Odpowiedz: \n");
|
||||
memset(buffer, 0, BUFFER_SIZE*sizeof(char));
|
||||
buffer_size = 0;
|
||||
recv(gniazdo, &buffer_size, 4, 0);
|
||||
buffer_size = ntohl(buffer_size);
|
||||
|
||||
while (buffer_size > 0) {
|
||||
bytesRead = recv(gniazdo, buffer, BUFFER_SIZE, 0);
|
||||
if (-1 == bytesRead) {
|
||||
printf("Blad podczas wczytywania z gniazda");
|
||||
break;
|
||||
}
|
||||
printf("%s", buffer);
|
||||
buffer_size -= bytesRead;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
close(gniazdo);
|
||||
return 0;
|
||||
}
|
BIN
filestorage-client/panobrazek.jpg
Normal file
BIN
filestorage-client/panobrazek.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 424 KiB |
3
filestorage-server/.gitignore
vendored
Normal file
3
filestorage-server/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.idea
|
||||
FileStorageServer.iml
|
||||
*/**/*.class
|
9
filestorage-server/README.md
Normal file
9
filestorage-server/README.md
Normal file
@ -0,0 +1,9 @@
|
||||
# FileStorage-Server
|
||||
|
||||
Szybki guide jak odpalić Serwer
|
||||
|
||||
```
|
||||
cd src
|
||||
javac Server.java
|
||||
java Server 8001
|
||||
```
|
121
filestorage-server/src/Connection.java
Normal file
121
filestorage-server/src/Connection.java
Normal file
@ -0,0 +1,121 @@
|
||||
import java.io.*;
|
||||
import java.nio.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.*;
|
||||
import java.net.*;
|
||||
|
||||
public class Connection implements Runnable {
|
||||
|
||||
private DataInputStream dis;
|
||||
private DataOutputStream dos;
|
||||
private Socket socket;
|
||||
|
||||
// konstruktor
|
||||
public Connection(Socket socket) throws IOException {
|
||||
this.dis = new DataInputStream(socket.getInputStream());
|
||||
this.dos = new DataOutputStream(socket.getOutputStream());
|
||||
this.socket = socket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
StringBuilder tc;
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
String outputMessage = "OK.";
|
||||
String filename;
|
||||
String received = "";
|
||||
int bytesRead = 0;
|
||||
boolean end = false;
|
||||
byte[] messageByte = new byte[1024];
|
||||
|
||||
// wczytywanie wejscia
|
||||
int bytesToRead = this.dis.readInt();
|
||||
while (!end) {
|
||||
bytesRead = this.dis.read(messageByte);
|
||||
received += new String(messageByte, 0, bytesRead);
|
||||
|
||||
if (received.length() == bytesToRead) {
|
||||
end = true;
|
||||
}
|
||||
}
|
||||
|
||||
// log
|
||||
System.out.println(socket + " Input: " + received);
|
||||
|
||||
if (received.startsWith("/exit")) {
|
||||
this.socket.close();
|
||||
Server.connections.removeElement(this);
|
||||
break;
|
||||
}
|
||||
|
||||
if (received.startsWith("/send")) {
|
||||
filename = Server.storageDir + "/" + received.substring(6).trim();
|
||||
Path file = Paths.get(filename);
|
||||
bytesToRead = this.dis.readInt();
|
||||
System.out.println(this.socket + " wysyla plik "+filename+". Rozmiar: "+bytesToRead+" bajtow. ");
|
||||
|
||||
boolean first = true;
|
||||
while (bytesToRead > 0) {
|
||||
bytesRead = this.dis.read(messageByte);
|
||||
if (first) {
|
||||
first = false;
|
||||
Files.write(file,Arrays.copyOf(messageByte, bytesRead));
|
||||
} else {
|
||||
Files.write(file, Arrays.copyOf(messageByte, bytesRead), StandardOpenOption.APPEND);
|
||||
}
|
||||
bytesToRead -= bytesRead;
|
||||
}
|
||||
System.out.println(this.socket + " Zapisano plik.");
|
||||
outputMessage = "Zapisano plik!.";
|
||||
}
|
||||
|
||||
if (received.startsWith("/ls")) {
|
||||
File folder = new File(Server.storageDir);
|
||||
File[] listOfFiles = folder.listFiles();
|
||||
tc = new StringBuilder();
|
||||
tc.append(String.format("Znaleziono %s plikow\n", listOfFiles.length));
|
||||
for (File file : listOfFiles) {
|
||||
if (file.isFile()) {
|
||||
tc.append(file.getName()).append("\n");
|
||||
}
|
||||
}
|
||||
outputMessage = tc.toString();
|
||||
}
|
||||
|
||||
if (received.startsWith("/rm")) {
|
||||
filename = received.substring(4).trim();
|
||||
File file = new File(Server.storageDir + "/" + filename);
|
||||
|
||||
if (file.delete()) {
|
||||
outputMessage = String.format("Usunieto plik %s ", filename);
|
||||
} else {
|
||||
outputMessage = String.format("Blad przy usunieciu pliku %s", filename);
|
||||
}
|
||||
}
|
||||
|
||||
this.dos.write(ByteBuffer.allocate(4).putInt(outputMessage.length()).array());
|
||||
this.dos.write(outputMessage.getBytes());
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
// closing resources
|
||||
this.dis.close();
|
||||
this.dos.close();
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
44
filestorage-server/src/Server.java
Normal file
44
filestorage-server/src/Server.java
Normal file
@ -0,0 +1,44 @@
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import java.net.*;
|
||||
|
||||
// Server class
|
||||
public class Server {
|
||||
|
||||
final public static String storageDir = System.getProperty("user.dir") + "/../storage";
|
||||
|
||||
public static Vector<Connection> connections = new Vector<>();
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
|
||||
int port;
|
||||
|
||||
if (args.length > 0) {
|
||||
port = Integer.parseInt(args[0]);
|
||||
} else {
|
||||
System.out.println("Uzywam: java Server <port>");
|
||||
return;
|
||||
}
|
||||
|
||||
ServerSocket serverSocket = new ServerSocket(port);
|
||||
System.out.println("Start serwera na porcie "+port);
|
||||
|
||||
Socket socket;
|
||||
|
||||
while (true) {
|
||||
// Akceptowanie nadchodzacego zapytania
|
||||
socket = serverSocket.accept();
|
||||
|
||||
System.out.println("Nowe polaczenie: " + socket);
|
||||
|
||||
Connection connection = new Connection(socket);
|
||||
|
||||
Thread thread = new Thread(connection);
|
||||
|
||||
connections.add(connection);
|
||||
|
||||
thread.start();
|
||||
}
|
||||
}
|
||||
}
|
BIN
filestorage-server/storage/basquiat.jpg
Normal file
BIN
filestorage-server/storage/basquiat.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 424 KiB |
Loading…
Reference in New Issue
Block a user