У меня есть класс A, который принимает TCP-соединение и отправляет этот новый сокет в поток B, где данные из этого сокета принимаются и отправляются.
Class A{
Class b = new B();
public void run()
{
b.start();
while(true){
Socket socket = serverSocket.accept();
if(socket==null || socket.isClosed())continue;
b.setSocket(socket);
}
}
}
Class B extends Thread{
Socket socket;
public void setSocket(Socket p_socket) throws IOException
{
if(socket!=null && !socket.isClosed())
{
try{
socket.close();
socket = null;
Thread.sleep(5);
}
catch(Exception ex)
{}
}
socket = p_socket;
inputStream = socket.getInputStream(); // Here I am getting socket.closed() exception very much.
}
В прошлом это работало довольно хорошо, но в последнее время я очень часто получаю следующую ошибку.
java.io.IOException: Socket Closed
at java.net.AbstractPlainSocketImpl.getInputStream(AbstractPlainSocketImpl.java:421)
at java.net.Socket$2.run(Socket.java:914)
at java.net.Socket$2.run(Socket.java:912)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.Socket.getInputStream(Socket.java:911)
Я не понимаю, почему это происходит сейчас после нескольких лет работы в порядке. Это связано с проблемой сети или чем-то связанным с Thread?
Обновлено:
Может ли это быть проблема, связанная с сервером? Потому что такое же приложение работает на другом сервере, но у них нет этой проблемы.