网络程序仅输出1

时间:2017-12-18 21:19:14

标签: java

基本上我已经创建了一个程序,通过将文本编码为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

1 个答案:

答案 0 :(得分:0)

Socket.isClosed()告诉您是否关闭此套接字

它没有告诉你关于连接状态的任何信息。

要确定 peer 是否在超时内关闭连接,您需要设置读取超时并执行。如果您获得SocketTimeoutException,则连接仍处于打开状态。如果read()返回-1,则会关闭。