Java ArrayList中的套接字无法关闭
因此,我有一个应用程序,其中我将套接字存储在服务器端的ArrayList中。当客户端关闭其应用程序时,套接字也必须关闭,但它不反映服务器中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
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()的连接不一致。