A P2P file sharing program, but overcomplicated and probably an overengineered one.
A feature-poor P2P (decentralized) file sharing program, overcomplicated and an overengineered one.
## ● Why ?
## ● Why ?
@ -16,7 +16,7 @@ In order to transfer one file on one computer to another - they need to establis
In order to establish a connection - there needs to be a 1) sender (server) (the owner of the file), waiting for connections, and a 2) receiver (client), who will try to connect to a sender (server). If the requirements are met - client will connect to server and the packet exchange will begin.
In order to establish a connection - there needs to be a 1) sender (server) (the owner of the file), waiting for connections, and a 2) receiver (client), who will try to connect to a sender (server). If the requirements are met - client will connect to server and the packet exchange will begin.
The server and the client needs to communicate with packets according to certain rules, given by a [protocol](https://github.com/Unbewohnte/ftu/tree/main/protocol).
The server and the client needs to communicate with packets according to certain rules, given by a [protocol](https://github.com/Unbewohnte/ftu/tree/main/src/protocol).
The packet has its header and body. They are divided into several groups of use by headers, this way we can specify what kind of data is stored inside packet`s body and react accordingly.
The packet has its header and body. They are divided into several groups of use by headers, this way we can specify what kind of data is stored inside packet`s body and react accordingly.
@ -31,13 +31,13 @@ Thus, with a connection and a way of communication, the sender will send some pa
- Proceed to [releases page](https://github.com/Unbewohnte/ftu/releases)
- Proceed to [releases page](https://github.com/Unbewohnte/ftu/releases)
- Choose a version/architecture you have and download an archive
- Choose a version/architecture you have and download an archive
- Unpack an archive
- Unpack an archive
- If on GNU/Linux - run `sudo make install`
- If on GNU/Linux - run `chmod +x install.sh && sudo ./install.sh`
### ● From source (Compile it yourself) (You need [Go](https://golang.org/dl/) and [git](https://git-scm.com/) to be installed on your machine)
### ● From source (Compile it yourself) (You need [Go](https://golang.org/dl/) and [git](https://git-scm.com/) to be installed on your machine)
- If on GNU/Linux - run `make && sudo make install` or `make && chmod +x install.sh && sudo ./install`
- If on GNU/Linux - run `sudo make install`
- else - cd into src/ folder and simply run `go build`; after that you`re free to put the binary wherever you desire
Now you have ftu installed !
Now you have ftu installed !
@ -67,10 +67,10 @@ creates a node that will connect to 192.168.1.104:7277 and download served file|
`ftu -p 7277 -a 192.168.1.104 -d /home/user/Downloads/`
`ftu -p 7277 -a 192.168.1.104 -d /home/user/Downloads/`
creates a node that will connect to 192.168.1.104:7277 and download served file|directory to "/home/user/Downloads/"
creates a node that will connect to 192.168.1.104:7277 and download served file|directory to "/home/user/Downloads/"
`ftu -s /home/user/homework`
`ftu -s /home/user/homework` (TODO)
creates a node that will send every file in the directory
creates a node that will send every file in the directory
`ftu -r -s /home/user/homework/`
`ftu -r -s /home/user/homework/` (TODO)
creates a node that will send every file in the directory !RECUSRIVELY!
creates a node that will send every file in the directory !RECUSRIVELY!
---
---
@ -85,10 +85,15 @@ In 'src' directory:
---
---
## ● IMPORTANT NOTE
## ● NOTE
This is NOT intended to be a serious application. I'm learning and this is a product of my curiosity. If you're a beginner too, please don't try to find something useful in my code, I am not an expert.
This is NOT intended to be a serious application. I'm learning and this is a product of my curiosity. If you're a beginner too, please don't try to find something useful in my code, I am not an expert in that regard.
Also, this utility only works if the server side has a port-forwarding|virtual server enabled and configured. Fortunatelly, locally it works without any port-forwarding|virtual servers.
This utility works only if the sender side has a port-forwarding|virtual server enabled and configured. Fortunatelly, locally it works without any
additional set ups.
I've created myself a lot of additional work by creating my own set of communication rules. The whole project could've been a lot easier to maintain
and read if I've used a built-in, well-tested and easily integrated solutions, but I still enjoy it the way it is right now. I couldn't be able to
learn so much and get practical experience by simply using http, ftp or whatever protocols there are out there.