与java异常混淆 编辑:
这个怎么样(套接字就是一个例子,它可以是其他类) 它可以抛出BindException,该异常可以是(例如getMessage()):与java异常混淆 编辑:,java,exception,Java,Exception,这个怎么样(套接字就是一个例子,它可以是其他类) 它可以抛出BindException,该异常可以是(例如getMessage()): 已在使用的地址:JVM\u Bind 无法分配请求的地址:JVM\u Bind 如果我必须以不同的方式对待[1]和[2],我如何才能抓住它们 例如: if [1] set somePort++ and retry else if [2] print cant use someIp to listen 原件: 也许我遗漏了什么,但是(例如): S
if [1]
set somePort++ and retry
else if [2]
print cant use someIp to listen
原件: 也许我遗漏了什么,但是(例如):
ServerSocket.accept()
可以抛出SocketException
(和其他)SocketException
可以是不同的情况(即连接关闭、重置等)catch (SocketException e)
{
if (e.getMessage().equals("this"))
{
doStuff();
}
else if (e.getMessage().equals("that"))
{
eatPotatoes();
}
}
accept()可以抛出SocketException(和其他)
以下是该方法可能引发的唯一异常:
IOException
-如果在等待连接时发生I/O错误
SecurityException
-如果安全管理器存在并且其checkAccept
方法不允许该操作
SocketTimeoutException
-如果先前使用setSoTimeout
设置了超时,并且已达到超时
IllegalBlockingModeException
-如果此套接字具有关联的通道,则该通道处于非阻塞模式,并且没有准备接受的连接
如果我必须根据具体的错误做不同的事情,是吗
这样做正确吗
不,您不应该继续使用您的方法,因为这不是一个好的实践,您宁愿使用单独的catch语句来处理不同类型的异常
ServerSocket.accept()
可以抛出SocketException
(和其他)IOException
或任何子类
SocketException
可以是不同的情况(即连接关闭、重置等)ServerSocket.accept()
中的任何一个。只有设置超时、SocketException:socket closed或TCP协议错误时,它才可能是SocketTimeoutException
处理任何异常的子类(在本例中为
IOException
)的正确方法是单独捕获它们(如果要单独处理它们)。但是,在accept()
的情况下,除了SocketTimeoutException
之外的所有异常都是致命的,因此您所能做的就是关闭ServerSocket
并退出accept循环。因此,您只需要两个catch
语句:一个用于SocketTimeoutException
,另一个用于IOException
,如果我猜是真的话。您需要子类SocketException。它同样是:
}catch(SocketException e){
if(e instanceof BindException){
}else if(e instanceof ConnectException){
}else if(e instanceof ConnectionResetException){
}else if(e instanceof NoRouteToHostException){
}else if(e instanceof PortUnreachableException){
}else{
}
}
希望能帮助你 依赖消息内容是危险的。SocketException确实有子类。在这些情况下,您可以单独捕获它们,或者在(例如ConnectException的instanceof)…重新编辑时执行。从根本上说,“无法分配请求的地址”是由于使用无效或非本地IP地址而导致的编程错误。因此,一旦清除了编程错误,它就不应该在运行时发生。为什么要使用instanceof而不是捕获类型?它还可以抛出
IOException
的子类,而BindException
只是其中之一。你应该使用单独的catch
块来代替这种暴行,但真正的问题是,ServerSocket.accept()
不会抛出任何ConnectException
、bindeexception
、noroutetohestexception
或portunreachableeexception
。后者确实仅适用于UDP。
}catch(SocketException e){
if(e instanceof BindException){
}else if(e instanceof ConnectException){
}else if(e instanceof ConnectionResetException){
}else if(e instanceof NoRouteToHostException){
}else if(e instanceof PortUnreachableException){
}else{
}
}