Add a way to use with nat
This commit is contained in:
parent
db1c7ac6b2
commit
613766ee46
@ -14,6 +14,7 @@ Documentation of the protocol used can be found in [doc/protocol.md](doc/protoco
|
||||
### Application CLI (Client+Server)
|
||||
- Interactive mode: `java clientP2P.ClientP2P`
|
||||
- CLI Arguments mode: `java clientP2P.ClientP2P -- <clientTransportProtocol> <integratedServerHOSTNAME> <integratedServerPORT> <trackerHOSTNAME> <trackerPORT>` (default tracker port 6969 (range 7000 -> 7999) and server port: server 7070 (range 7000->7070))
|
||||
- CLI Arguments mode when using with a nat: `java clientP2P.ClientP2P -- <clientTransportProtocol> <integratedServerHOSTNAME> <integratedServerPORT> <trackerHOSTNAME> <trackerPORT> <serverBindingHOSTNAME> <serverBindingPORT>` (default tracker port 6969 (range 7000 -> 7999) and server port: server 7070 (range 7000->7070))
|
||||
|
||||
### Application GUI (Client+Server)
|
||||
- `java gui.Gui`
|
||||
|
@ -29,6 +29,7 @@ public class ClientP2P {
|
||||
private Directories directories;
|
||||
private HostItem tracker;
|
||||
private HostItem server;
|
||||
private HostItem serverBinding;
|
||||
private Scanner scanner;
|
||||
final static boolean DEBUG = false;
|
||||
|
||||
@ -46,14 +47,17 @@ public class ClientP2P {
|
||||
}
|
||||
|
||||
/** Constructor.
|
||||
* @param hostnameServer hostname to bind
|
||||
* @param portServer port to bind
|
||||
* @param hostnameServer hostname used to register
|
||||
* @param portServer port used to register
|
||||
* @param hostnameServerBinding hostname to bind
|
||||
* @param portServerBinding port to bind
|
||||
* @param hostnameTracker hostname of tracker
|
||||
* @param portTracker port of tracker
|
||||
*/
|
||||
public ClientP2P(String hostnameServer, int portServer, String hostnameTracker, int portTracker) {
|
||||
public ClientP2P(String hostnameServer, int portServer, String hostnameServerBinding, int portServerBinding, String hostnameTracker, int portTracker) {
|
||||
scanner = new Scanner(System.in);
|
||||
server = new HostItem(hostnameServer, portServer);
|
||||
serverBinding = new HostItem(hostnameServerBinding, portServerBinding);
|
||||
tracker = new HostItem(hostnameTracker, portTracker);
|
||||
initDirectoriesAndLoggers();
|
||||
System.out.println("Server will listen on port " + portServer + " and serve files from " + directories.getDataHomeDirectory());
|
||||
@ -72,6 +76,12 @@ public class ClientP2P {
|
||||
"<clientTransportProtocol> " +
|
||||
"<integratedServerHOSTNAME> <integratedServerPORT> " +
|
||||
"<trackerHOSTNAME> <trackerPORT> ");
|
||||
System.out.println("or");
|
||||
System.out.println("\tjava clientP2P.ClientP2P -- " +
|
||||
"<clientTransportProtocol> " +
|
||||
"<integratedServerHOSTNAME> <integratedServerPORT> " +
|
||||
"<trackerHOSTNAME> <trackerPORT> " +
|
||||
"<integratedServerBindHOSTNAME> <integratedServerBindPORT>");
|
||||
System.out.println("(" + trackerPortRange + " and " + serverPortRange +")");
|
||||
}
|
||||
|
||||
@ -82,6 +92,8 @@ public class ClientP2P {
|
||||
*/
|
||||
public static void main(String [] args) {
|
||||
final String defaultHostname = "localhost";
|
||||
String hostnameServBind = "";
|
||||
int portServBind = 0;
|
||||
String hostnameServer = "";
|
||||
int portServer = 0;
|
||||
String hostnameTracker = "";
|
||||
@ -94,13 +106,22 @@ public class ClientP2P {
|
||||
if ((args.length != 6) && (args.length != 0)) {
|
||||
ClientP2P.printUsage(serverPortRange, trackerPortRange);
|
||||
System.exit(1);
|
||||
}
|
||||
else if (args.length == 6) {
|
||||
protocolClient = args[1];
|
||||
hostnameServer = args[2];
|
||||
portServer = Integer.valueOf(Integer.parseInt(args[3]));
|
||||
hostnameTracker = args[4];
|
||||
portTracker = Integer.valueOf(Integer.parseInt(args[5]));
|
||||
} else if (args.length == 6) {
|
||||
protocolClient = args[1];
|
||||
hostnameServer = args[2];
|
||||
portServer = Integer.valueOf(Integer.parseInt(args[3]));
|
||||
hostnameTracker = args[4];
|
||||
portTracker = Integer.valueOf(Integer.parseInt(args[5]));
|
||||
hostnameServBind = hostnameServer;
|
||||
portServBind = portServer;
|
||||
} else if (args.length == 8) {
|
||||
protocolClient = args[1];
|
||||
hostnameServer = args[2];
|
||||
portServer = Integer.valueOf(Integer.parseInt(args[3]));
|
||||
hostnameTracker = args[4];
|
||||
portTracker = Integer.valueOf(Integer.parseInt(args[5]));
|
||||
hostnameServBind = args[6];
|
||||
portServBind = Integer.valueOf(Integer.parseInt(args[7]));
|
||||
} else {
|
||||
System.out.println("Client, wich transport protocol do you want to use (default = TCP): ");
|
||||
protocolClient = scanner.nextLine();
|
||||
@ -132,19 +153,22 @@ public class ClientP2P {
|
||||
} else {
|
||||
portTracker = Integer.valueOf(Integer.parseInt(portTrackerStr));
|
||||
}
|
||||
hostnameServBind = hostnameServer;
|
||||
portServBind = portServer;
|
||||
}
|
||||
|
||||
boolean serverInRange = serverPortRange.isPortInRange(portServer);
|
||||
boolean serverBindInRange = serverPortRange.isPortInRange(portServBind);
|
||||
boolean trackerInRange = trackerPortRange.isPortInRange(portTracker);
|
||||
|
||||
if (serverInRange && trackerInRange) {
|
||||
if (serverInRange && trackerInRange & serverBindInRange) {
|
||||
System.out.println("using hostname : " + hostnameServer);
|
||||
System.out.println("using port : " + portServer);
|
||||
System.out.println("tracker hostname : " + hostnameTracker);
|
||||
System.out.println("tracker port : " + portTracker);
|
||||
ClientP2P c = new ClientP2P(hostnameServer, portServer, hostnameTracker, portTracker);
|
||||
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory(), c.server, c.tracker, c.loggerServer);
|
||||
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory(), c.server, c.tracker, c.loggerServer);
|
||||
ClientP2P c = new ClientP2P(hostnameServer, portServer, hostnameServBind, portServBind, hostnameTracker, portTracker);
|
||||
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory(), c.serverBinding, c.server, c.tracker, c.loggerServer);
|
||||
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory(), c.serverBinding, c.server, c.tracker, c.loggerServer);
|
||||
Thread tudp = new Thread(smudp);
|
||||
tudp.setName("server UDP P2P-JAVA-PROJECT");
|
||||
tudp.start();
|
||||
@ -193,6 +217,9 @@ public class ClientP2P {
|
||||
if (!trackerInRange) {
|
||||
System.err.println("TRACKER: Port not in range. " + trackerPortRange);
|
||||
}
|
||||
if (!serverBindInRange) {
|
||||
System.err.println("SERVER-BINDING: Port not in range. " + serverPortRange);
|
||||
}
|
||||
System.exit(2);
|
||||
}
|
||||
}
|
||||
|
@ -45,20 +45,29 @@ public abstract class ServerManagement extends ServeErrors implements Runnable {
|
||||
protected Logger logger;
|
||||
protected String baseDirectory;
|
||||
protected HostItem server;
|
||||
protected HostItem serverBinding;
|
||||
protected HostItem tracker;
|
||||
protected Random punisher = new Random();
|
||||
protected RatioWatcher ratioWatcher;
|
||||
|
||||
/** Constructor */
|
||||
public ServerManagement(String baseDirectory, HostItem server, HostItem tracker, Logger logger) {
|
||||
/** Constructor
|
||||
* @param baseDirectory the root directory where files are stored
|
||||
* @param serverBinding ther server will bind on this hostItem
|
||||
* @param server the server hostItem used to register on tracker
|
||||
* @param logger Logger item
|
||||
* @param tracker Tracker
|
||||
*/
|
||||
public ServerManagement(String baseDirectory, HostItem serverBinding, HostItem server, HostItem tracker, Logger logger) {
|
||||
super();
|
||||
assert baseDirectory != null : "baseDirectory is null";
|
||||
assert serverBinding != null : "serverBinding is null";
|
||||
assert server != null : "server is null";
|
||||
assert tracker != null : "tracker is null";
|
||||
assert logger != null : "logger is null";
|
||||
stop = false;
|
||||
this.baseDirectory = baseDirectory;
|
||||
this.server = server;
|
||||
this.serverBinding = serverBinding;
|
||||
this.tracker = tracker;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
@ -47,26 +47,37 @@ import serverP2P.FileWatcherTCP;
|
||||
* @version 1.0
|
||||
*/
|
||||
public class ServerManagementTCP extends ServerManagement {
|
||||
|
||||
private ServerSocket socket;
|
||||
|
||||
/** Constructor for TCP implementation, with baseDirectory and TCPPort parameters.
|
||||
/** Constructor for TCP implementation.
|
||||
* @param baseDirectory the root directory where files are stored
|
||||
* @param hostName the server will bind on this address
|
||||
* @param TCPPort the server will listen on this port
|
||||
* @param serverBinding ther server will bind on this hostItem
|
||||
* @param server the server hostItem used to register on tracker
|
||||
* @param logger Logger item
|
||||
* @param tracker Tracker
|
||||
*/
|
||||
public ServerManagementTCP(String baseDirectory, HostItem serverBinding, HostItem server, HostItem tracker, Logger logger) {
|
||||
super(baseDirectory, serverBinding, server, tracker, logger);
|
||||
initSocket();
|
||||
}
|
||||
|
||||
/** Constructor for TCP implementation.
|
||||
* @param baseDirectory the root directory where files are stored
|
||||
* @param server the server hostItem used to register on tracker
|
||||
* @param logger Logger item
|
||||
* @param tracker Tracker
|
||||
*/
|
||||
public ServerManagementTCP(String baseDirectory, HostItem server, HostItem tracker, Logger logger) {
|
||||
super(baseDirectory, server, tracker, logger);
|
||||
assert baseDirectory != null : "baseDirectory is null";
|
||||
assert server != null : "server is null";
|
||||
assert tracker != null : "tracker is null";
|
||||
assert logger != null : "logger is null";
|
||||
super(baseDirectory, server, server, tracker, logger);
|
||||
initSocket();
|
||||
}
|
||||
|
||||
/** Initialize socket */
|
||||
private void initSocket() {
|
||||
try {
|
||||
socket = new ServerSocket(server.getPort(), 10, server.getInetAddress());
|
||||
socket = new ServerSocket(serverBinding.getPort(), 10, serverBinding.getInetAddress());
|
||||
} catch (SocketException e) {
|
||||
writeLog("Error: cannot listen on " + server, LogLevel.Error);
|
||||
writeLog("Error: cannot listen on " + serverBinding, LogLevel.Error);
|
||||
System.exit(-1);
|
||||
} catch (IOException e) {
|
||||
writeLog("Error: cannot openning socket", LogLevel.Error);
|
||||
|
@ -47,23 +47,35 @@ public class ServerManagementUDP extends ServerManagement {
|
||||
|
||||
private DatagramSocket socket;
|
||||
|
||||
/** Constructor for UDP implementation, with baseDirectory and UDPPort parameters.
|
||||
/** Constructor for UDP implementation.
|
||||
* @param baseDirectory the root directory where files are stored
|
||||
* @param hostName the server will bind on this address
|
||||
* @param port the server will listen on this port
|
||||
* @param server the server hostItem used to register on tracker
|
||||
* @param logger Logger item
|
||||
* @param tracker Tracker
|
||||
*/
|
||||
public ServerManagementUDP(String baseDirectory, HostItem server, HostItem tracker, Logger logger) {
|
||||
super(baseDirectory, server, tracker, logger);
|
||||
assert baseDirectory != null : "baseDirectory is null";
|
||||
assert server != null : "server is null";
|
||||
assert tracker != null : "tracker is null";
|
||||
assert logger != null : "logger is null";
|
||||
super(baseDirectory, server, server, tracker, logger);
|
||||
initSocket();
|
||||
}
|
||||
|
||||
/** Constructor for UDP implementation.
|
||||
* @param baseDirectory the root directory where files are stored
|
||||
* @param serverBinding ther server will bind on this hostItem
|
||||
* @param server the server hostItem used to register on tracker
|
||||
* @param logger Logger item
|
||||
* @param tracker Tracker
|
||||
*/
|
||||
public ServerManagementUDP(String baseDirectory, HostItem serverBinding, HostItem server, HostItem tracker, Logger logger) {
|
||||
super(baseDirectory, serverBinding, server, tracker, logger);
|
||||
initSocket();
|
||||
}
|
||||
|
||||
/** Initialize socket */
|
||||
private void initSocket() {
|
||||
try {
|
||||
socket = new DatagramSocket(server.getPort(), server.getInetAddress());
|
||||
socket = new DatagramSocket(serverBinding.getPort(), serverBinding.getInetAddress());
|
||||
} catch (SocketException e) {
|
||||
logger.writeUDP("Error: cannot listen on " + server, LogLevel.Error);
|
||||
logger.writeUDP("Error: cannot listen on " + serverBinding, LogLevel.Error);
|
||||
System.exit(-1);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user