programs quit when ports entered are wrong (#97)
flavien's git/Projet_JAVA_P2P_STRI2A/pipeline/head This commit looks good Details

Fix #93.
- Programs quit when ports entered are wrong.

Fix #94.
- Server doesnt ask to open his home directory when arguments are passed.
- Tracker doesnt ask to open his home directory when arguments are passed.

Co-authored-by: Louis Royer <louis.royer@univ-tlse3.fr>
Co-authored-by: flavien <flavien.haas@outlook.fr>
Co-authored-by: js_auge <auge1@hotmail.fr>
pull/99/head
Flavien Haas 5 years ago committed by Louis Royer
parent dfde8d4527
commit c2d05aeeb9

@ -89,28 +89,28 @@ public class ClientP2P {
final ServerPortRange serverPortRange = new ServerPortRange(); final ServerPortRange serverPortRange = new ServerPortRange();
final TrackerPortRange trackerPortRange = new TrackerPortRange(); final TrackerPortRange trackerPortRange = new TrackerPortRange();
if ((args.length != 6) && (args.length != 0)){ if ((args.length != 6) && (args.length != 0)) {
ClientP2P.printUsage(serverPortRange, trackerPortRange); ClientP2P.printUsage(serverPortRange, trackerPortRange);
System.exit(1); System.exit(1);
} }
else if(args.length == 6){ else if (args.length == 6) {
protocolClient = args[1]; protocolClient = args[1];
hostnameServer = args[2]; hostnameServer = args[2];
portServer = Integer.valueOf(Integer.parseInt(args[3])); portServer = Integer.valueOf(Integer.parseInt(args[3]));
hostnameTracker = args[4]; hostnameTracker = args[4];
portTracker = Integer.valueOf(Integer.parseInt(args[5])); portTracker = Integer.valueOf(Integer.parseInt(args[5]));
} else{ } else {
System.out.println("Client, wich transport protocol do you want to use (default = TCP): "); System.out.println("Client, wich transport protocol do you want to use (default = TCP): ");
protocolClient = scanner.nextLine(); protocolClient = scanner.nextLine();
System.out.println("server side, enter hostname to bind (default = localhost): "); System.out.println("server side, enter hostname to bind (default = localhost): ");
hostnameServer = scanner.nextLine(); hostnameServer = scanner.nextLine();
if(hostnameServer.equals("")){ if (hostnameServer.equals("")) {
hostnameServer = defaultHostname; hostnameServer = defaultHostname;
System.out.println("using default hostname : " + hostnameServer); System.out.println("using default hostname : " + hostnameServer);
} }
System.out.println("enter port (default = " + serverPortRange.getDefaultPort() +"): "); System.out.println("enter port (default = " + serverPortRange.getDefaultPort() +"): ");
String portServerStr = scanner.nextLine(); String portServerStr = scanner.nextLine();
if(portServerStr.equals("")){ if (portServerStr.equals("")) {
portServer = serverPortRange.getDefaultPort(); portServer = serverPortRange.getDefaultPort();
System.out.println("using default port : " + portServer); System.out.println("using default port : " + portServer);
} else { } else {
@ -118,13 +118,13 @@ public class ClientP2P {
} }
System.out.println("enter hostname of tracker (default = localhost): "); System.out.println("enter hostname of tracker (default = localhost): ");
hostnameTracker = scanner.nextLine(); hostnameTracker = scanner.nextLine();
if(hostnameTracker.equals("")){ if (hostnameTracker.equals("")) {
hostnameTracker = defaultHostname; hostnameTracker = defaultHostname;
System.out.println("tracker default hostname : " + hostnameTracker); System.out.println("tracker default hostname : " + hostnameTracker);
} }
System.out.println("enter tracker's port (default = "+trackerPortRange.getDefaultPort() + "): "); System.out.println("enter tracker's port (default = "+trackerPortRange.getDefaultPort() + "): ");
String portTrackerStr = scanner.nextLine(); String portTrackerStr = scanner.nextLine();
if(portTrackerStr.equals("")){ if (portTrackerStr.equals("")) {
portTracker = trackerPortRange.getDefaultPort(); portTracker = trackerPortRange.getDefaultPort();
System.out.println("using default port : " + portTracker); System.out.println("using default port : " + portTracker);
} else { } else {
@ -132,68 +132,66 @@ public class ClientP2P {
} }
} }
System.out.println("using hostname : " + hostnameServer); boolean serverInRange = serverPortRange.isPortInRange(portServer);
if(serverPortRange.isPortInRange(portServer)){ boolean trackerInRange = trackerPortRange.isPortInRange(portTracker);
System.out.println("using port : " + portServer);
}
else {
System.out.println("Port not in range. " + serverPortRange);
portServer = serverPortRange.getDefaultPort();
}
System.out.println("tracker hostname : " + hostnameTracker);
if(trackerPortRange.isPortInRange(portTracker)){
System.out.println("using port : " + portTracker);
}
else {
System.out.println("Port not in range. " + trackerPortRange);
portTracker = trackerPortRange.getDefaultPort();
}
ClientP2P c = new ClientP2P(hostnameServer, portServer, hostnameTracker, portTracker);
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory(), c.server, c.tracker, c.loggerServer); if (serverInRange && trackerInRange) {
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory(), c.server, c.tracker, c.loggerServer); System.out.println("using hostname : " + hostnameServer);
Thread tudp = new Thread(smudp); System.out.println("using port : " + portServer);
tudp.setName("server UDP P2P-JAVA-PROJECT"); System.out.println("tracker hostname : " + hostnameTracker);
tudp.start(); System.out.println("tracker port : " + portTracker);
Thread ttcp = new Thread(smtcp); ClientP2P c = new ClientP2P(hostnameServer, portServer, hostnameTracker, portTracker);
ttcp.setName("server TCP P2P-JAVA-PROJECT"); ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory(), c.server, c.tracker, c.loggerServer);
ttcp.start(); ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory(), c.server, c.tracker, c.loggerServer);
Thread tudp = new Thread(smudp);
tudp.setName("server UDP P2P-JAVA-PROJECT");
tudp.start();
Thread ttcp = new Thread(smtcp);
ttcp.setName("server TCP P2P-JAVA-PROJECT");
ttcp.start();
// Wait a bit before printing client interface // Wait a bit before printing client interface
// This is not required, but allow to have a cleaner interface // This is not required, but allow to have a cleaner interface
try { try {
Thread.sleep(200); Thread.sleep(200);
} catch(InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
Thread tclient; Thread tclient;
switch(protocolClient){ switch (protocolClient) {
case "UDP": case "UDP":
case "udp": case "udp":
case "upd": // to avoid users typos case "upd": // to avoid users typos
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, c.server); ClientManagementUDP cmudp = new ClientManagementUDP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner, c.server);
tclient = new Thread(cmudp); tclient = new Thread(cmudp);
break; break;
case "TCP": case "TCP":
case "tcp": case "tcp":
case "1": case "1":
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, c.server); ClientManagementTCP cmtcp = new ClientManagementTCP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner, c.server);
tclient = new Thread(cmtcp); tclient = new Thread(cmtcp);
break; break;
}
tclient.setName("client P2P-JAVA-PROJECT");
tclient.start();
try {
tclient.join();
} catch (InterruptedException e) {}
smudp.setStop();
smtcp.setStop();
} else {
if (!serverInRange) {
System.err.println("SERVER: Port not in range. " + serverPortRange);
}
if (!trackerInRange) {
System.err.println("TRACKER: Port not in range. " + trackerPortRange);
}
System.exit(2);
} }
tclient.setName("client P2P-JAVA-PROJECT");
tclient.start();
try {
tclient.join();
} catch (InterruptedException e) {}
smudp.setStop();
smtcp.setStop();
} }
} }

@ -29,8 +29,9 @@ public class ServerP2P {
* @param portServer binded port * @param portServer binded port
* @param hostnameTracker tracker hostname * @param hostnameTracker tracker hostname
* @param portTracker tracker port * @param portTracker tracker port
* @param isInteractive true if application in interactive mode
*/ */
public ServerP2P(String hostnameServer, int portServer, String hostnameTracker, int portTracker) { public ServerP2P(String hostnameServer, int portServer, String hostnameTracker, int portTracker, boolean isInteractive) {
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
server = new HostItem(hostnameServer, portServer); server = new HostItem(hostnameServer, portServer);
tracker = new HostItem(hostnameTracker, portTracker); tracker = new HostItem(hostnameTracker, portTracker);
@ -38,7 +39,9 @@ public class ServerP2P {
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 " + portServer + " and serve files from " + directories.getDataHomeDirectory() + subdir); System.out.println("Server will listen on port " + portServer + " and serve files from " + directories.getDataHomeDirectory() + subdir);
directories.askOpenDataHomeDirectory(subdir, scanner); if (isInteractive) {
directories.askOpenDataHomeDirectory(subdir, scanner);
}
scanner.close(); scanner.close();
} }
@ -56,73 +59,76 @@ public class ServerP2P {
String hostnameTracker = ""; String hostnameTracker = "";
int portTracker = 0; int portTracker = 0;
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
boolean isInteractive = false;
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> (" + serverPortRange + " and " + trackerPortRange +")"); System.out.println("usage : java serveurP2P.ServeurP2P (interactive) or java serveurP2P.ServeurP2P -- <serveurHOSTNAME> <serveurPORT> <trackerHOSTNAME> <trackerPORT> (" + serverPortRange + " and " + trackerPortRange +")");
System.exit(1); System.exit(1);
} }
else if(args.length == 5){ else if (args.length == 5) {
hostnameServer = args[1]; isInteractive = false;
portServer = Integer.valueOf(Integer.parseInt(args[2])); hostnameServer = args[1];
hostnameTracker = args[3]; portServer = Integer.valueOf(Integer.parseInt(args[2]));
portTracker = Integer.valueOf(Integer.parseInt(args[4])); hostnameTracker = args[3];
portTracker = Integer.valueOf(Integer.parseInt(args[4]));
} else { } else {
isInteractive = true;
// configure application
System.out.println("Server, enter hostname to bind (default = localhost): "); System.out.println("Server, enter hostname to bind (default = localhost): ");
hostnameServer = scanner.nextLine(); hostnameServer = scanner.nextLine();
if(hostnameServer.equals("")){ if (hostnameServer.equals("")) {
hostnameServer = defaultHostname; hostnameServer = defaultHostname;
System.out.println("using default hostname : " + hostnameServer); System.out.println("using default hostname : " + hostnameServer);
} }
System.out.println("enter port (default = " + serverPortRange.getDefaultPort() + "): "); System.out.println("Enter port (default = " + serverPortRange.getDefaultPort() + "): ");
String portServerStr = scanner.nextLine(); String portServerStr = scanner.nextLine();
if(portServerStr.equals("")){ if (portServerStr.equals("")) {
portServer = serverPortRange.getDefaultPort(); portServer = serverPortRange.getDefaultPort();
System.out.println("using default port : " + portServer); System.out.println("using default port : " + portServer);
} else { } else {
portServer = Integer.valueOf(Integer.parseInt(portServerStr)); portServer = Integer.valueOf(Integer.parseInt(portServerStr));
} }
System.out.println("enter hostname of tracker (default = localhost): "); // configure tracker
System.out.println("Enter hostname of tracker (default = localhost): ");
hostnameTracker = scanner.nextLine(); hostnameTracker = scanner.nextLine();
if(hostnameTracker.equals("")){ if (hostnameTracker.equals("")) {
hostnameTracker = defaultHostname; hostnameTracker = defaultHostname;
System.out.println("tracker default hostname : " + hostnameTracker); System.out.println("tracker default hostname : " + hostnameTracker);
} }
System.out.println("enter tracker's port (default = " + trackerPortRange.getDefaultPort() + "): "); System.out.println("Enter tracker's port (default = " + trackerPortRange.getDefaultPort() + "): ");
String portTrackerStr = scanner.nextLine(); String portTrackerStr = scanner.nextLine();
if(portTrackerStr.equals("")){ if (portTrackerStr.equals("")) {
portTracker = serverPortRange.getDefaultPort(); portTracker = trackerPortRange.getDefaultPort();
System.out.println("using default port : " + portTracker); System.out.println("using default port : " + portTracker);
} else { } else {
portTracker = Integer.valueOf(Integer.parseInt(portTrackerStr)); portTracker = Integer.valueOf(Integer.parseInt(portTrackerStr));
} }
} }
System.out.println("using hostname : " + hostnameServer); boolean serverInRange = serverPortRange.isPortInRange(portServer);
if(serverPortRange.isPortInRange(portServer)) { boolean trackerInRange = trackerPortRange.isPortInRange(portTracker);
if (serverInRange && trackerInRange) {
System.out.println("using hostname : " + hostnameServer);
System.out.println("using port : " + portServer); System.out.println("using port : " + portServer);
System.out.println("tracker hostname : " + hostnameTracker);
System.out.println("tracker port : " + portTracker);
ServerP2P s = new ServerP2P(hostnameServer, portServer, hostnameTracker, portTracker, isInteractive);
ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, s.server, s.tracker, s.logger);
ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, s.server, s.tracker, s.logger);
Thread tudp = new Thread(smudp);
tudp.setName("server UDP P2P-JAVA-PROJECT");
tudp.start();
Thread ttcp = new Thread(smtcp);
ttcp.setName("server TCP P2P-JAVA-PROJECT");
ttcp.start();
} else {
if (!serverInRange) {
System.err.println("SERVER: Port not in range. " + serverPortRange);
}
if (!trackerInRange) {
System.err.println("TRACKER: Port not in range. " + trackerPortRange);
}
System.exit(2);
} }
else {
System.out.println("Port not in range. " + serverPortRange);
portServer = serverPortRange.getDefaultPort();
}
System.out.println("tracker hostname : " + hostnameTracker);
if(trackerPortRange.isPortInRange(portTracker)) {
System.out.println("using port : " + portTracker);
}
else {
System.out.println("Port not in range. " + trackerPortRange);
portTracker = trackerPortRange.getDefaultPort();
}
ServerP2P s = new ServerP2P(hostnameServer, portServer, hostnameTracker, portTracker);
ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, s.server, s.tracker, s.logger);
ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, s.server, s.tracker, s.logger);
Thread tudp = new Thread(smudp);
tudp.setName("server UDP P2P-JAVA-PROJECT");
tudp.start();
Thread ttcp = new Thread(smtcp);
ttcp.setName("server TCP P2P-JAVA-PROJECT");
ttcp.start();
} }
} }

@ -24,14 +24,17 @@ public class Tracker {
/** Constructor with portStr containing a port number. /** Constructor with portStr containing a port number.
* @param hostname hostname to bind * @param hostname hostname to bind
* @param port port to bind * @param port port to bind
* @param isInteractive true if application is in interactive mode
*/ */
public Tracker(String hostname, int port) { public Tracker(String hostname, int port, boolean isInteractive) {
tracker = new HostItem(hostname, port); tracker = new HostItem(hostname, port);
directories = new Directories("P2P_JAVA_PROJECT_TRACKER_" + port); directories = new Directories("P2P_JAVA_PROJECT_TRACKER_" + port);
logger = new Logger(directories.getDataHomeDirectory() + "tracker.log"); logger = new Logger(directories.getDataHomeDirectory() + "tracker.log");
System.out.println("Tracker will listen on port " + port + " and write logs into " + directories.getDataHomeDirectory()); System.out.println("Tracker will listen on port " + port + " and write logs into " + directories.getDataHomeDirectory());
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
directories.askOpenDataHomeDirectory(null, scanner); if (isInteractive) {
directories.askOpenDataHomeDirectory(null, scanner);
}
scanner.close(); scanner.close();
} }
@ -47,23 +50,26 @@ public class Tracker {
String hostname = ""; String hostname = "";
int port = 0; int port = 0;
Tracker t; Tracker t;
boolean isInteractive = false;
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> (" + trackerPortRange +")"); System.out.println("usage : java tracker.Tracker (interactive) or java trackerP2P.trackerP2P -- <hostname> <PORT> (" + trackerPortRange +")");
System.exit(1); System.exit(1);
} else if (args.length == 3){ } else if (args.length == 3) {
hostname = args[1]; isInteractive = false;
port = Integer.valueOf(Integer.parseInt(args[2])); hostname = args[1];
port = Integer.valueOf(Integer.parseInt(args[2]));
} else { } else {
isInteractive = true;
System.out.println("Tracker Server, enter hostname to bind (default = localhost): "); System.out.println("Tracker Server, enter hostname to bind (default = localhost): ");
hostname = scanner.nextLine(); hostname = scanner.nextLine();
if(hostname.equals("")){ if (hostname.equals("")) {
hostname = defaultHostname; hostname = defaultHostname;
System.out.println("using default hostname : " + hostname); System.out.println("using default hostname : " + hostname);
} }
System.out.println("enter port (default = " + trackerPortRange.getDefaultPort() +"): "); System.out.println("enter port (default = " + trackerPortRange.getDefaultPort() +"): ");
String portStr = scanner.nextLine(); String portStr = scanner.nextLine();
if(portStr.equals("")){ if (portStr.equals("")) {
port = trackerPortRange.getDefaultPort(); port = trackerPortRange.getDefaultPort();
System.out.println("using default port : " + port); System.out.println("using default port : " + port);
} else { } else {
@ -72,22 +78,20 @@ public class Tracker {
} }
System.out.println("using hostname : " + hostname); System.out.println("using hostname : " + hostname);
if(trackerPortRange.isPortInRange(port)) { if (trackerPortRange.isPortInRange(port)) {
System.out.println("using port : " + port); System.out.println("using port : " + port);
t = new Tracker(hostname, port); t = new Tracker(hostname, port, isInteractive);
} TrackerManagementUDP tmudp = new TrackerManagementUDP(t.tracker, t.logger);
else { TrackerManagementTCP tmtcp = new TrackerManagementTCP(t.tracker, t.logger);
Thread tudp = new Thread(tmudp);
tudp.setName("Tracker UDP P2P-JAVA-PROJECT");
tudp.start();
Thread ttcp = new Thread(tmtcp);
ttcp.setName("Tracker TCP P2P-JAVA-PROJECT");
ttcp.start();
} else {
System.out.println("Port not in range. " + trackerPortRange); System.out.println("Port not in range. " + trackerPortRange);
t = new Tracker(hostname, trackerPortRange.getDefaultPort()); System.exit(2);
} }
TrackerManagementUDP tmudp = new TrackerManagementUDP(t.tracker, t.logger);
TrackerManagementTCP tmtcp = new TrackerManagementTCP(t.tracker, t.logger);
Thread tudp = new Thread(tmudp);
tudp.setName("Tracker UDP P2P-JAVA-PROJECT");
tudp.start();
Thread ttcp = new Thread(tmtcp);
ttcp.setName("Tracker TCP P2P-JAVA-PROJECT");
ttcp.start();
} }
} }

Loading…
Cancel
Save