June 2001
Intermediate to advanced
888 pages
21h 1m
English
You want
more detailed reporting than just
IOException if something goes wrong.
Catch a greater variety of
exception classes. There are several
subclasses of SocketException; the most notable of
these are
ConnectException
and
NoRouteToHostException. The names are
self-explanatory: the first means that the connection was refused by
the machine at the other end (the server machine), and the second
completely explains the failure. Example 15-3
is an excerpt from the Connect program, enhanced
to handle these conditions.
Example 15-3. ConnectFriendly.java
/* Client with error handling */
public class ConnectFriendly {
public static void main(String[] argv) {
String server_name = argv.length == 1 ? argv[0] : "localhost";
int tcp_port = 80;
try {
Socket sock = new Socket(server_name, tcp_port);
/* Finally, we can read and write on the socket. */
System.out.println(" *** Connected to " + server_name + " ***");
/* ... */
sock.close( );
} catch (UnknownHostException e) {
System.err.println(server_name + " Unknown host");
return;
} catch (NoRouteToHostException e) {
System.err.println(server_name + " Unreachable" );
return;
} catch (ConnectException e) {
System.err.println(server_name + " connect refused");
return;
} catch (java.io.IOException e) {
System.err.println(server_name + ' ' + e.getMessage( ));
return;
}
}
}