finished work

pull/79/head
Flavien Haas 4 years ago
parent 387a487d83
commit 64032e84c4

@ -8,9 +8,9 @@ Les étapes suivantes sont conseillées.
# Usage # Usage
tracker : java tracker.Tracker tracker : java tracker.Tracker (interactive) or java trackerP2P.trackerP2P -- <hostname> <PORT> (default port 6969 (range 6000 -> 6999))
server : java serveurP2P.ServeurP2P server : java serveurP2P.ServeurP2P (interactive) or java serveurP2P.ServeurP2P -- <serveurHOSTNAME> <serveurPORT> <trackerHOSTNAME> <trackerPORT> (default server port: server 7070 (range 7000->7070) and tracker port 6969 (range 7000 -> 7999))
client/serveur : java clientP2P.ClientP2P client/serveur : java clientP2P.ClientP2P or java clientP2P.ClientP2P -- <clientTransportProtocol> <integratedServerHOSTNAME> <integratedServerPORT> <trackerHOSTNAME> <trackerPORT> (default tracker port 6969 (range 7000 -> 7999) and server port: server 7070 (range 7000->7070))
## Étape 1 : Téléchargement à la FTP ## Étape 1 : Téléchargement à la FTP

@ -2,14 +2,17 @@ package clientP2P;
import java.util.Scanner; import java.util.Scanner;
import java.util.List; import java.util.List;
import javafx.util.Pair;
import clientP2P.ClientManagementUDP; import clientP2P.ClientManagementUDP;
import clientP2P.ClientManagementTCP; import clientP2P.ClientManagementTCP;
import serverP2P.ServerManagementUDP; import serverP2P.ServerManagementUDP;
import serverP2P.ServerManagementTCP; import serverP2P.ServerManagementTCP;
import tools.Logger; import tools.Logger;
import tools.LogLevel; import tools.LogLevel;
import tools.Directories; import tools.Directories;
import tools.HostItem; import tools.HostItem;
import tools.TestPort;
/** Client + Server implementation. /** Client + Server implementation.
* @author Louis Royer * @author Louis Royer
@ -23,20 +26,17 @@ public class ClientP2P {
private String partsDir = ".parts/"; private String partsDir = ".parts/";
private Logger loggerServer; private Logger loggerServer;
private Logger loggerClient; private Logger loggerClient;
private String host; private int portServer;
private int port;
private Directories directories; private Directories directories;
private static final int defaultPort = 20000;
private HostItem tracker; private HostItem tracker;
private Scanner scanner; private Scanner scanner;
/** Initialize loggers if directories and logger are null, /** Initialize loggers if directories and logger are null,
* else fail silently. * else fail silently.
*/ */
public void initDirectoriesAndLoggers() { public void initDirectoriesAndLoggers() {
if (directories == null && loggerServer == null && loggerClient == null) { if (directories == null && loggerServer == null && loggerClient == null) {
directories = new Directories("P2P_JAVA_PROJECT_" + port); directories = new Directories("P2P_JAVA_PROJECT_" + portServer);
directories.createSubdir(logDir); directories.createSubdir(logDir);
loggerServer = new Logger(directories.getDataHomeDirectory() + logDir + "server.log"); loggerServer = new Logger(directories.getDataHomeDirectory() + logDir + "server.log");
loggerClient = new Logger(directories.getDataHomeDirectory() + logDir + "client.log"); loggerClient = new Logger(directories.getDataHomeDirectory() + logDir + "client.log");
@ -44,26 +44,16 @@ public class ClientP2P {
} }
} }
/** Constructor with portStr as parameter. /** Constructor with portServerstr as parameter.
* @param portStr String containing port for server listenning. * @param portServerstr String containing port for server listenning.
*/ */
public ClientP2P(String portStr) { public ClientP2P(String portServerstr, String hostnameTracker, String portTracker) {
scanner = new Scanner(System.in); scanner = new Scanner(System.in);
tracker = new HostItem("localhost", 30000); // TODO : make it configurable portServer = Integer.valueOf(Integer.parseInt(portServerstr));
try{ tracker = new HostItem(hostnameTracker, Integer.valueOf(Integer.parseInt(portTracker)));
port = Integer.valueOf(Integer.parseInt(portStr));
} catch (NumberFormatException e){
int oldPort = port;
port = defaultPort;
initDirectoriesAndLoggers();
System.err.println("Error incorrect port " + oldPort + " using default port " + defaultPort);
loggerServer.write("incorrect port " + oldPort + " using default port " + defaultPort, LogLevel.Info);
}
initDirectoriesAndLoggers(); initDirectoriesAndLoggers();
host = "localhost"; System.out.println("Server will listen on port " + portServer + " and serve files from " + directories.getDataHomeDirectory());
System.out.println("Server will listen on port " + port + " and serve files from " + directories.getDataHomeDirectory());
directories.askOpenDataHomeDirectory(null, scanner); directories.askOpenDataHomeDirectory(null, scanner);
System.out.println("Please enter list of servers to use; first one will be used to ask list of files");
} }
/** Main program entry point. /** Main program entry point.
@ -72,25 +62,86 @@ public class ClientP2P {
* @param args server listenning port * @param args server listenning port
*/ */
public static void main(String [] args) { public static void main(String [] args) {
if (args[1].equals("help") || args[1].equals("-h") || args[1].equals("h")){ final String defaultHostname = "localhost";
System.out.println("usage : java clientP2P.ClientP2P or java clientP2P.ClientP2P -- <integratedServerPORT> <trackerHOSTNAME> <trackerPORT> (default for integratedServer localhost:7070 and tracker localhost:6969, range 7000 -> 7999)"); final String defaultPortServer = "7070";
final String defaultPortTracker = "6969";
String hostnameServer = "";
String portServer = "";
String hostnameTracker = "";
String portTracker = "";
String protocolClient = "";
Scanner scanner = new Scanner(System.in);
TestPort testPort = new TestPort();
if ((args.length != 6) && (args.length != 0)){
System.out.println("usage : java clientP2P.ClientP2P or java clientP2P.ClientP2P -- <clientTransportProtocol> <integratedServerHOSTNAME> <integratedServerPORT> <trackerHOSTNAME> <trackerPORT> (default tracker port 6969 (range 7000 -> 7999) and server port: server 7070 (range 7000->7070))");
} }
else{ else{
ClientP2P c; if(args.length == 6){
try { protocolClient = args[1];
c = new ClientP2P(args[1]); hostnameServer = args[2];
} catch (IndexOutOfBoundsException e){ portServer = args[3];
c = new ClientP2P("" + defaultPort); hostnameTracker = args[4];
portTracker = args[5];
}
else{
System.out.println("Client, wich transport protocol do you want to use (default = TCP): ");
protocolClient = scanner.nextLine();
System.out.println("server side, enter hostname to bind (default = localhost): ");
hostnameServer = scanner.nextLine();
if(hostnameServer.equals("")){
hostnameServer = defaultHostname;
System.out.println("using default hostname : " + hostnameServer);
}
System.out.println("enter port (default = 7070): ");
portServer = scanner.nextLine();
if(portServer.equals("")){
portServer = defaultPortServer;
System.out.println("using default port : " + portServer);
}
System.out.println("enter hostname of tracker (default = localhost): ");
hostnameTracker = scanner.nextLine();
if(hostnameTracker.equals("")){
hostnameTracker = defaultHostname;
System.out.println("tracker default hostname : " + hostnameTracker);
}
System.out.println("enter tracker's port (default = 6969): ");
portTracker = scanner.nextLine();
if(portTracker.equals("")){
portTracker = defaultPortTracker;
System.out.println("using default port : " + portTracker);
}
} }
// Server threads System.out.println("using hostname : " + hostnameServer);
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory(), "localhost", c.port, c.loggerServer, c.tracker); Pair<Integer, String> PtestPortServer = testPort.testPortServer(Integer.parseInt(portServer));
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory(), "localhost", c.port, c.loggerServer, c.tracker); if(PtestPortServer.getKey() == 0){
System.out.println("using port : " + portServer);
}
else {
System.out.println(PtestPortServer.getValue());
portServer = defaultPortServer;
}
System.out.println("tracker hostname : " + hostnameTracker);
Pair<Integer, String> PtestPortTracker = testPort.testPortTracker(Integer.parseInt(portTracker));
if(PtestPortTracker.getKey() == 0){
System.out.println("using port : " + portTracker);
}
else {
System.out.println(PtestPortTracker.getValue());
portTracker = defaultPortTracker;
}
ClientP2P c = new ClientP2P(portServer, hostnameTracker, portTracker);
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory(), hostnameServer, c.portServer, c.loggerServer, c.tracker);
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory(), hostnameServer, c.portServer, c.loggerServer, c.tracker);
Thread tudp = new Thread(smudp); Thread tudp = new Thread(smudp);
tudp.setName("server UDP P2P-JAVA-PROJECT (port: " + c.port + ")"); tudp.setName("server UDP P2P-JAVA-PROJECT");
tudp.start(); tudp.start();
Thread ttcp = new Thread(smtcp); Thread ttcp = new Thread(smtcp);
ttcp.setName("server TCP P2P-JAVA-PROJECT (port: " + c.port + ")"); ttcp.setName("server TCP P2P-JAVA-PROJECT");
ttcp.start(); ttcp.start();
// Wait a bit before printing client interface // Wait a bit before printing client interface
@ -101,19 +152,15 @@ public class ClientP2P {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
// initialize Host lists Thread tclient;
System.out.println("Client : Which transport protocol do you want to use? [TCP/udp]"); switch(protocolClient){
c.scanner.hasNextLine();
String transportchoosen = c.scanner.nextLine();
Thread t;
switch(transportchoosen){
case "UDP": case "UDP":
case "udp": case "udp":
case "upd": // alias typo case "upd":
case "2" : case "2" :
System.out.println("Starting with UDP"); System.out.println("Starting with UDP");
ClientManagementUDP cmudp = new ClientManagementUDP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner); ClientManagementUDP cmudp = new ClientManagementUDP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner);
t = new Thread(cmudp); tclient = new Thread(cmudp);
break; break;
case "TCP": case "TCP":
case "tcp": case "tcp":
@ -121,18 +168,16 @@ public class ClientP2P {
default: default:
System.out.println("Starting with TCP"); System.out.println("Starting with TCP");
ClientManagementTCP cmtcp = new ClientManagementTCP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner); ClientManagementTCP cmtcp = new ClientManagementTCP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner);
t = new Thread(cmtcp); tclient = new Thread(cmtcp);
break; break;
} }
t.setName("client P2P-JAVA-PROJECT"); tclient.setName("client P2P-JAVA-PROJECT");
t.start(); tclient.start();
try { try {
t.join(); tclient.join();
} catch (InterruptedException e) {} } catch (InterruptedException e) {}
c.scanner.close();
smudp.setStop(); smudp.setStop();
smtcp.setStop(); smtcp.setStop();
} }
} }
} }

@ -18,30 +18,30 @@ import tools.TestPort;
* @version 1.0 * @version 1.0
*/ */
public class ServerP2P { public class ServerP2P {
private int port; private int portServer;
private Directories directories; private Directories directories;
static private final String subdir = "seeded/"; static private final String subdir = "seeded/";
private Logger logger; private Logger logger;
private HostItem tracker; private HostItem tracker;
/** Constructor with portStr containing a port number. /** Constructor with portServerstr containing a port number.
* @param portStr String containing port number of listening. * @param portServerstr String containing port number of listening.
*/ */
public ServerP2P(String portStr, String trackerHostname, String trackerPortStr) { public ServerP2P(String portServerstr, String hostnameTracker, String portTracker) {
port = Integer.valueOf(Integer.parseInt(portStr)); Scanner scanner = new Scanner(System.in);
tracker = new HostItem(trackerHostname, Integer.valueOf(Integer.parseInt(trackerPortStr))); portServer = Integer.valueOf(Integer.parseInt(portServerstr));
directories = new Directories("P2P_JAVA_PROJECT_SERVER_" + port); tracker = new HostItem(hostnameTracker, Integer.valueOf(Integer.parseInt(portTracker)));
directories = new Directories("P2P_JAVA_PROJECT_SERVER_" + portServer);
directories.createSubdir(subdir); directories.createSubdir(subdir);
logger = new Logger(directories.getDataHomeDirectory() + "server.log"); logger = new Logger(directories.getDataHomeDirectory() + "server.log");
System.out.println("Server will listen on port " + port + " and serve files from " + directories.getDataHomeDirectory() + subdir); System.out.println("Server will listen on port " + portServer + " and serve files from " + directories.getDataHomeDirectory() + subdir);
Scanner scanner = new Scanner(System.in);
directories.askOpenDataHomeDirectory(subdir, scanner); directories.askOpenDataHomeDirectory(subdir, scanner);
scanner.close(); scanner.close();
} }
/** Main program entry point /** Main program entry point
* first parameter is port number and is mandatory * first parameter is port number and is mandatory
* to test, run with: java -ea serverP2P.ServerP2P * to test, run with: java serverP2P.ServerP2P
* @param args parameters * @param args parameters
*/ */
public static void main(String [] args) { public static void main(String [] args) {
@ -56,7 +56,7 @@ public class ServerP2P {
TestPort testPort = new TestPort(); TestPort testPort = new TestPort();
if ((args.length != 5) && (args.length != 0)){ if ((args.length != 5) && (args.length != 0)){
System.out.println("usage : java serveurP2P.ServeurP2P (interactive) or java serveurP2P.ServeurP2P -- <serveurHOSTNAME> <serveurPORT> <trackerHOSTNAME> <trackerPORT>"); System.out.println("usage : java serveurP2P.ServeurP2P (interactive) or java serveurP2P.ServeurP2P -- <serveurHOSTNAME> <serveurPORT> <trackerHOSTNAME> <trackerPORT> (default server port: server 7070 (range 7000->7070) and tracker port 6969 (range 7000 -> 7999))");
} }
else{ else{
if(args.length == 5){ if(args.length == 5){
@ -113,8 +113,8 @@ public class ServerP2P {
} }
ServerP2P s = new ServerP2P(portServer, hostnameTracker, portTracker); ServerP2P s = new ServerP2P(portServer, hostnameTracker, portTracker);
ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, hostnameServer, s.port, s.logger, s.tracker); ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, hostnameServer, s.portServer, s.logger, s.tracker);
ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, hostnameServer, s.port, s.logger, s.tracker); ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, hostnameServer, s.portServer, s.logger, s.tracker);
Thread tudp = new Thread(smudp); Thread tudp = new Thread(smudp);
tudp.setName("server UDP P2P-JAVA-PROJECT"); tudp.setName("server UDP P2P-JAVA-PROJECT");
tudp.start(); tudp.start();

@ -10,15 +10,21 @@ import javafx.util.Pair;
*/ */
public class TestPort { public class TestPort {
/** test if port given correspond a range : registered ports, can be used without superuser privileges
* @return Pair<Integer,String>
*/
public Pair<Integer,String> testPortServer(int port) { public Pair<Integer,String> testPortServer(int port) {
if((port > 7000) && (port < 7999)){ if((port >= 7000) && (port <= 7999)){
return new Pair<>(0,""); return new Pair<>(0,"");
} }
return new Pair<>(1, "Wrong port (7000 -> 7999), using default port 7070"); return new Pair<>(1, "Wrong port (7000 -> 7999), using default port 7070");
} }
/** test if port given correspond a range : : registered ports, can be used without superuser privileges, 6969 correspond to the unofficial bittorent tracker
* @return Pair<Integer,String>
*/
public Pair<Integer,String> testPortTracker(int port) { public Pair<Integer,String> testPortTracker(int port) {
if((port > 6000) && (port < 6999)){ if((port >= 6000) && (port <= 6999)){
return new Pair<>(0,""); return new Pair<>(0,"");
} }
return new Pair<>(1, "Wrong port (6000 -> 6999), using default port 6969"); return new Pair<>(1, "Wrong port (6000 -> 6999), using default port 6969");

@ -32,11 +32,13 @@ public class Tracker {
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
directories.askOpenDataHomeDirectory(null, scanner); directories.askOpenDataHomeDirectory(null, scanner);
scanner.close(); scanner.close();
//t.logger.write(PtestPortTracker.getValue(), LogLevel.Warning);
} }
/** Main program entry point /** Main program entry point
* first parameter is port number and is mandatory * first parameter is port number and is mandatory
* to test, run with: java -ea serverP2P.ServerP2P * to test, run with: java serverP2P.ServerP2P
* @param args parameters * @param args parameters
*/ */
public static void main(String [] args) { public static void main(String [] args) {
@ -49,7 +51,7 @@ public class Tracker {
Tracker t; Tracker t;
if ((args.length != 3) && (args.length != 0)){ if ((args.length != 3) && (args.length != 0)){
System.out.println("usage : java tracker.Tracker (interactive) or java trackerP2P.trackerP2P -- <hostname> <PORT> (default localhost:6969, range 6000 -> 6999)"); System.out.println("usage : java tracker.Tracker (interactive) or java trackerP2P.trackerP2P -- <hostname> <PORT> (default port 6969 (range 6000 -> 6999))");
} }
else{ else{
if(args.length == 3){ if(args.length == 3){
@ -80,7 +82,6 @@ public class Tracker {
else { else {
System.out.println(PtestPortTracker.getValue()); System.out.println(PtestPortTracker.getValue());
t = new Tracker(defaultPort); t = new Tracker(defaultPort);
t.logger.write(PtestPortTracker.getValue(), LogLevel.Warning);
} }
TrackerManagementUDP tmudp = new TrackerManagementUDP(hostname, t.port, t.logger); TrackerManagementUDP tmudp = new TrackerManagementUDP(hostname, t.port, t.logger);

Loading…
Cancel
Save