package examples.example2_one_client_OO; import java.io.IOException; import java.net.BindException; import java.net.ConnectException; import java.net.NoRouteToHostException; import java.net.SocketException; import java.net.UnknownHostException; import javax.swing.JOptionPane; /** *
* NetworkingExamples project: examples.example2_one_client_OO.
*
* A simple example of networking (Sockets) in which:
* -- A single Server and Client exchange information, one after the other.
*
* This is the same example as {@link examples.example1_one_client}
* except structured in a more OO way. In particular, this structure has 3 classes:
* -- Main: for starting the program.
* -- Server: for initiating and running the Server.
* -- Client: for initiating and running the Client.
*
* Run this program on one computer choosing "Server"
* and on another computer choosing "Client".
*
* Or, run both on the same computer; choose "localhost" as the Server HostName.
*
* NOTE:
* 1. The Server should be started before the Client starts.
* 2. Before running this program, you may need to tell your Firewall not to
* block the port that this program uses (4444, chosen arbitrarily). In Windows, do so by:
* Control Panel ~ Windows Firewall ~ Exceptions tab ~ Add Port
* and enter the port number (4444) with any name you like.
*
* See {@link examples.example1_one_client#MainForServer} for:
* -- Exactly what information the Server and Client exchange in this demo.
* -- The 7 Key Statements that are all-you-need-to-know to do networking in Java.
*
* See {@link examples.example3_one_client_OO_library} for this same example
* but using the simple networking library in package {@link simpleNetworking}.
*
*
* @author David Mutchler, based on the Java Tutorials on networking. May, 2009.
*/
public class Main {
private static int PORT = 4444; // most numbers > 1023 are probably OK here
/**
* Asks the user whether she wishes to be the Server or Client,
* and constructs whichever she requests.
*
* @param commandLineArguments Ignored here
*/
public static void main(String[] commandLineArguments) {
String hostName = "";
String whoAmI = "";
try {
String[] options = {"Server", "Client"};
int answer = JOptionPane.showOptionDialog(
null,
"Are you the Server or the Client?\n\n"
+ "Remember to start the Server before the Client.\n\n",
"Which are you -- Server or Client?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
"Server");
if (answer == 0) {
whoAmI = "Server";
new Server(Main.PORT);
} else {
whoAmI = "Client";
hostName = JOptionPane.showInputDialog(
"OK, you are the Client and have started.\n\n"
+ "What is the HostName (e.g. mutchler-3.rose-hulman.edu)\n"
+ "or IP address (e.g. 137.112.40.1) of the Server?\n"
+ "(Enter localhost or just press OK for this local machine.)\n\n");
new Client(hostName, Main.PORT);
}
} catch (UnknownHostException exception) {
System.out.println(exception);
JOptionPane.showMessageDialog(null,
whoAmI + " could not connect to " + hostName
+ " because that is an unknown host.\n\n"
+ "The Server may still running; fix that by running a Client\n"
+ "(without starting a Server).\n\n");
} catch (ConnectException exception) {
System.out.println(exception);
JOptionPane.showMessageDialog(null,
whoAmI + " could not connect to " + hostName
+ " either because:\n"
+ " -- the Server is not yet started, or \n"
+ " -- the host does not accept connections on port " + Main.PORT + ".\n\n"
+ "The Server may still running; fix that by running a Client\n"
+ "(without starting a Server).\n\n");
} catch (NoRouteToHostException exception) {
System.out.println(exception);
JOptionPane.showMessageDialog(null,
whoAmI + " could not connect to " + hostName
+ " perhaps because\n"
+ "the hostname " + hostName
+ " does not allow connections on port " + Main.PORT + ".\n\n"
+ "The Server may still running; fix that by running a Client\n"
+ "(without starting a Server).\n\n");
} catch (BindException exception) {
System.out.println(exception);
JOptionPane.showMessageDialog(null,
whoAmI + " could not connect to " + hostName
+ " perhaps because\n"
+ "port " + Main.PORT + " is in use.\n"
+ "The Server is probably still running; stop it by getting a Client to run.\n\n"
+ "The Server may still running; fix that by running a Client\n"
+ "(without starting a Server).\n\n");
} catch (SocketException exception) {
System.out.println(exception);
JOptionPane.showMessageDialog(null,
whoAmI + " ended, either because it could not start\n"
+ "or (more likely) because the user closed the Server.\n\n");
} catch (IOException exception) {
System.out.println(exception);
JOptionPane.showMessageDialog(null,
whoAmI + " ended, probably because the user closed the Server.\n\n");
}
catch (Throwable exception) {
System.out.println(exception);
JOptionPane.showMessageDialog(null, whoAmI + " ended abnormally. See stack trace.\n\n");
exception.printStackTrace();
}
}
}