ArrayList中的套接字不会被关闭

时间:2014-06-04 10:15:48

标签: java sockets arraylist

所以我有这个应用程序,我将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。但是,即使我从客户端关闭套接字,这条语句也永远不会失败。

1 个答案:

答案 0 :(得分:1)

  

当我从客户端关闭套接字时,isConnected()方法必须返回false。

不,它不能。它在哪里说?

现实情况是isConnected()如果您连接了Socket,,那么{true}将返回true。检测 peer 终止的正确方法如下:

  • read()返回-1
  • readLine()返回null
  • readXXX()针对任何其他 XXX
  • 投掷EOFException
  • write()抛出IOException