我有以下3行代码:
ServerSocket listeningSocket = new ServerSocket(earPort);
Socket serverSideSocket = listeningSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(serverSideSocket.getInputStream()));
编译器抱怨所有这3行,并且它的抱怨对于所有3行是相同的:未报告的异常java.io.IOException;更详细地说,new ServerSocket
,accept()
和getInputStream()
抛出了这些异常。
我知道我需要使用try ... catch ...
。但为此,我需要知道在每个特定情况下这个例外意味着什么(我应该如何解释它们)。什么时候发生?我的意思是,不是一般的,而是在这3个特殊情况下。
答案 0 :(得分:5)
你不知道特别是因为IO异常也是一个“通用”异常,在技术上可能有很多原因。这意味着输入/输出发生了意想不到的问题,但显然它在本地硬盘上的原因与在互联网上的原因不同。
通常,所有三个项目都会解决套接字问题。因此,原因与网络问题有关。可能的是:
基本围绕这一行。
只要您真正对流进行某些操作,就会发生相同的情况。
在这个问题上,你有两个可能的主要原因:
答案 1 :(得分:1)
最简单的方法是声明您的调用方法抛出IOException,但是在离开方法之前需要清除finally
子句中的已分配资源:
public void doSession ( ) throws IOException
{
final ServerSocket listeningSocket = new ServerSocket(earPort);
try
{
final Socket serverSideSocket = listeningSocket.accept();
try
{
final BufferedReader in =
new BufferedReader(
new InputStreamReader(
serverSideSocket.getInputStream()
)
);
}
finally
{
serverSideSocket.close( )
}
}
finally
{
listeningSocket.close( )
}
}
答案 2 :(得分:1)
一般来说,确切地说导致初始IOException的原因并不重要,因为您的应用程序几乎无法纠正这种情况。
但是,作为对“做什么”问题的一般回答你有几个选择。