所以我有这个应用程序,我将Sockets存储在服务器端的ArrayList中。当客户端关闭其应用程序时,套接字也必须关闭,但它不会反映服务器中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。但是,即使我从客户端关闭套接字,这条语句也永远不会失败。
答案 0 :(得分:1)
当我从客户端关闭套接字时,
isConnected()
方法必须返回false。
不,它不能。它在哪里说?
现实情况是isConnected()
如果您连接了Socket,
,那么{true}将返回true。检测 peer 终止的正确方法如下:
read()
返回-1 readLine()
返回null
readXXX()
针对任何其他 XXX EOFException
write()
抛出IOException