In Java 1.0, a problem with a socket
method is likely to throw a
java.net.SocketException
, which is a subclass of
IOException
:
public class SocketException extends IOException
Indeed, even in Java 1.1 and later, many methods are declared to
throw only SocketException
or even
IOException
rather than the more specific
subclasses. However, knowing that a problem occurred is often not
sufficient to deal with the problem. Did the remote host refuse the
connection because it was busy? Did the remote host refuse the
connection because no service was listening on the port? Did the
connection attempt timeout because of network congestion or because
the host was down? Java 1.1 added three new subclasses of
SocketException
that provide more information
about what went wrong: BindException
,
ConnectException
, and
NoRouteToHostException
:
public class BindException extends SocketException public class ConnectException extends SocketException public class NoRouteToHostException extends SocketException
A BindException
is thrown if you try to construct
a Socket
or ServerSocket
object
on a local port that is in use or that you do not have sufficient
privileges to use. A ConnectException
is thrown
when a connection is refused at the remote host, which usually
happens because the host is busy or no process is listening on that
port. Finally, a NoRouteToHostException
indicates
that the connection has timed out.
Code that you write in Java 1.0 should catch
SocketException
and
IOException
. Since all three of these new
exceptions are subclasses of SocketException
, that
code should continue to work in Java 1.1. New code that you write in
Java 1.1 and later can take advantage of these three subclasses to
provide more informative error messages or to decide whether retrying
the offending operation is likely to be successful.
18.217.194.39