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