基本上我已经创建了一个程序,通过将文本编码为6位数的二进制形式来发送文本到另一台计算机,以节省空间,但这不是重点,它是如何发送数据的。它使用Socket连接。然后如果它是0则立即断开连接,但如果它是1则等待一定时间然后关闭套接字。这是我用来发送文本的代码:
* encoded是布尔
的数组列表for(int i = 0;i < encoded.size();i+=6){
for(int b = i; b < i+6; b++){
Socket s1 = new Socket(ip,5576);
if(encoded.get(b) == true){
Thread.sleep(2000);
}
s1.close();
}
}
,服务器代码是这样的:
while(true){
Socket s = ss.accept();
if(first){
first = false;
continue;
}
Thread.sleep(1000);
if(!s.isClosed()){
encoded.add(true);
zerosInRow = 0;
System.out.println(1);
}else{
encoded.add(false);
zerosInRow++;
System.out.println(0);
}
if(zerosInRow >= 6){
encoded.remove(encoded.size()-1);
encoded.remove(encoded.size()-2);
encoded.remove(encoded.size()-3);
encoded.remove(encoded.size()-4);
encoded.remove(encoded.size()-5);
encoded.remove(encoded.size()-6);
break;
}
}
但问题是它在运行时仅输出1
答案 0 :(得分:0)
Socket.isClosed()
告诉您你是否关闭此套接字。
它没有告诉你关于连接状态的任何信息。
要确定 peer 是否在超时内关闭连接,您需要设置读取超时并执行读。如果您获得SocketTimeoutException
,则连接仍处于打开状态。如果read()
返回-1,则会关闭。