gpt4 book ai didi

java - ArrayList 中的套接字不会关闭

转载 作者:行者123 更新时间:2023-12-01 12:53:42 24 4
gpt4 key购买 nike

所以我有这个应用程序,其中我将套接字存储在服​​务器端的 ArrayList 中。当客户端关闭其应用程序时,套接字也必须关闭,但它不会反射(reflect)服务器中 ArrayList 中的更改。

class arrays
{
public static ArrayList<Socket> online_buyer=new ArrayList<Socket>();
public static ArrayList<Socket> online_seller=new ArrayList<Socket>();
public static ArrayList<String> buyer_prod=new ArrayList<String>();

}

public void seller_display()
{
while(true)
{


if(flag==1)
{

synchronized(sock)
{
for(int i=0;i<arrays.online_buyer.size();i++)
{
System.out.println(arrays.buyer_prod.get(i));
}
flag=0;
}
}


check2();

}

}


public void check2()
{
for(int i=0;i<arrays.online_buyer.size();i++)
{
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
**while(!arrays.online_buyer.get(i).isConnected())**
{
arrays.online_buyer.remove(i);
arrays.buyer_user.remove(i);
arrays.buyer_add.remove(i);
arrays.buyer_prod.remove(i);
arrays.time.remove(i);
arrays.buyer_no.remove(i);
flag=1;
System.out.println("RECORD DELETED");
}


}

}


public void run()
{
get_details();

}
}

现在语句 while(!arrays.online_buyer.get(i).isConnected()) 必须是 while(!false)=true。当我从客户端关闭套接字时,isconnected() 方法必须返回 false。但即使我从客户端关闭套接字,这个语句也永远不会出错。

最佳答案

When I close the socket from the client side as isConnected() method must return false.

不,不应该。哪里说的?

实际情况是,如果您曾经连接过这个 Socket,那么 isConnected() 将返回 true。检测对等终止的正确方法如下:

  • read() 返回 -1
  • readLine() 返回 null
  • readXXX() 对于任何其他 XXX 都会抛出 EOFException
  • write() 抛出 IOException

关于java - ArrayList 中的套接字不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com