Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList中的套接字无法关闭_Java_Sockets_Arraylist - Fatal编程技术网

Java ArrayList中的套接字无法关闭

Java ArrayList中的套接字无法关闭,java,sockets,arraylist,Java,Sockets,Arraylist,因此,我有一个应用程序,其中我将套接字存储在服务器端的ArrayList中。当客户端关闭其应用程序时,套接字也必须关闭,但它不反映服务器中ArrayList中的更改 class arrays { public static ArrayList<Socket> online_buyer=new ArrayList<Socket>(); public static ArrayList<Socket> online_seller=new Array

因此,我有一个应用程序,其中我将套接字存储在服务器端的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();

    }
}
类数组
{
public static ArrayList online_buyer=new ArrayList();
public static ArrayList online_seller=new ArrayList();
public static ArrayList buyer_prod=new ArrayList();
}
公共显示器()
{
while(true)
{   
如果(标志==1)
{
同步(sock)
{
对于(int i=0;i
当我从客户端关闭套接字时,
isConnected()
方法必须返回false

不,不可以。它在哪里说的

实际情况是,
isConnected()

  • read()
    返回-1
  • readLine()
    返回
    null
  • readXXX()
    为任何其他XXX抛出
    EOFEException
  • write()
    抛出
    IOException

是否尝试编译此代码?:)TCP来拯救!服务器无法检测到关闭的连接,除非它尝试对其进行读取或写入。您的问题是否可以归结为“为什么
socket.isConnected()
即使在客户端关闭连接后仍返回
true
”?据我所知,您不会注意到在
isConnected
状态下的客户端关闭事件,而是由输入流中的EOF信号引起的。@EJP-回答得很好,谢谢Hanks man。他们应该将方法命名为everconnected“返回套接字的连接状态”已经足够清楚了,但我同意他们应该添加关于与此和
isClosed()的连接不一致。