有没有办法通过ObjectOutputStream或Socket本身检查套接字是否存活?

时间:2013-08-17 15:41:24

标签: java

我用Java编写了一个客户端 - 服务器聊天室。我想确保所有用户都在线,如果有人通过fource断开连接,我想告诉大家他已离开。 如何检查用户是否在线? 我有一个带有这个数据的类:Username,Socket,ObjectInputStream,ObjectOutputStream给每个用户...... 非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用此功能检查通过端口的流量。这个程序我写了一会儿监视插座。如果您将消息组播到各种套接字,您可以修改此程序,以便在该端口上提供客户端的演示文稿〜

import java.io.IOException;
import java.net.Socket;


public class ConnectionTest {

    private static boolean available(int port) {
        System.out.println("--------------Testing port " + port);
        Socket s = null;
        try {
            s = new Socket("localhost", port);

            // If the code makes it this far without an exception it means
            // something is using the port and has responded.
            System.out.println("--------------Port " + port + " is not available");
            return false;
        } catch (IOException e) {
            System.out.println("--------------Port " + port + " is available");
            return true;
        } finally {
            if( s != null){
                try {
                    s.close();
                } catch (IOException e) {
                    throw new RuntimeException("You should handle this error." , e);
                }
            }
        }
    }
    public static void main(String[] args) {

        System.out.println (available (1234)); // check if someone is on the port

    }

}

ALSO


 private void closeLink() {
    try{
        out.println ("bye"); //tell server client is disconnecting
        sock.close ();
    }
    catch (Exception e){
        System.out.println (e);
    }
    System.exit(0);
}

答案 1 :(得分:0)

您需要做的就是检查Socket对象。假设在实际进入TCP连接之前不构造每用户类,只需使用Socket#isClosed()即可。另请注意getInputStream()上记录的行为。