我有一个接受 TCP 连接并将这个新套接字发送到线程 B 的类 A,在那里接收和发送来自该套接字的数据。
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)
我不明白为什么在多年工作正常之后现在会发生这种情况。这是由于网络问题还是线程相关的东西?
更新:这可能是与服务器相关的问题吗?因为相同的应用程序正在其他服务器上运行,但他们没有这个问题。