Recipe 16.3 Handling Network Errors


Problem

You want more detailed reporting than just IOException if something goes wrong.

Solution

Catch a greater variety of exception classes. SocketException has several subclasses; the most notable 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 16-3 is an excerpt from the Connect program, enhanced to handle these conditions.

Example 16-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;         }     } }



Java Cookbook
Java Cookbook, Second Edition
ISBN: 0596007019
EAN: 2147483647
Year: 2003
Pages: 409
Authors: Ian F Darwin

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net