关闭套接字时出现SocketException



我有一个客户端,它连续发送和接收工作正常的数据消息,但是当我关闭/停止客户端时,我得到以下单行错误:

java.net.SocketException: Socket closed

尽管我关闭套接字在一个尝试-最后封闭。现在我的问题是,为什么我收到这个错误,是否这种行为是正常的或不,以及如何妥善处理这个错误。下面是我的代码:

public static void main(String[] args) throws UnknownHostException, IOException {

Socket socket = null;

try {
socket = new Socket("localhost", 9101);

PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
System.out.println(in.readLine());
} catch (IOException e) {
e.printStackTrace();
System.out.println("error");
}
}
}
});
thread.start();

System.out.println("Write to server:");

Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
String message = scanner.nextLine(); 
out.println(message);
out.flush();
};
} finally {
socket.close();
}
}

我认为你试图在一个单独的线程中读取套接字,即使在主线程关闭套接字后,另一个线程仍试图从它读取。

我想一个简单的签入你的其他线程可能解决这个问题:

if(socket.isClosed())
System.out.println(in.readLine());

我对isClosed的使用持怀疑态度,但我认为它值得一试。

相关内容

  • 没有找到相关文章

最新更新