我正在尝试创建“多客户端-单服务器”连接。我的客户端打开连接并在服务器端创建
     Client clt = new Client("127.0.0.1", 9000);
        clt.openConn();
...
public Client(String serverAddress, int serverPort) {
    this.serverAddress = serverAddress;
    this.serverPort = serverPort;
}
try {
        this.clientSocket = new Socket(this.serverAddress, this.serverPort);
        this.clientSocket.setKeepAlive(true);
        this.clientSocket.setSoTimeout(0);
            oos = new DataOutputStream(this.clientSocket.getOutputStream());
            ois = new DataInputStream(this.clientSocket.getInputStream());...}
...
在服务器端,我创建了 ServerSocket 的 ListArray,每一个都在我包裹在线程上。
    ServerSocket serverSocket = null ;
        Socket clientSocket;
        boolean listening = true;
        ArrayList threadList = new ArrayList();
        Iterator itSrvThr;
    try {
            serverSocket = new ServerSocket(port);
        } catch (IOException e) {
            System.err.println("Could not listen on port: " + port + ".");
            System.exit(-1);
        }
        while (listening) {
            clientSocket = serverSocket.accept();
            ServerThread srvThread = new ServerThread(clientSocket);
            srvThread.start();
`...`
    }
在哪里
 ServerThread extends Thread
    {...
         public void run() {
           this.ois = new DataInputStream(socket.getInputStream());
           this.oos = new DataOutputStream(socket.getOutputStream());    
         }
    }
我的程序发送和接收对象(我称它们为“Datagramm”),它们是文件和字符串的某种包装器(假设它是客户端-服务器的某种语言)
现在关于我遇到的问题。每次需要从服务器端测试“活动”套接字时,我都必须进行验证......我正试图在那一刻在 ArrayList 中出现新元素时进行此验证,但这给我带来了“Datagramm”发送的问题
itSrvThr = threadList.iterator();
            while (itSrvThr.hasNext()) {
                ServerThread st = (ServerThread) itSrvThr.next();
                boolean stoppedSocket = st.getStopped();
                if (stoppedSocket) {
                    st.stop();
                    itSrvThr.remove();
                }else {??? resolution???}
stopSocket - 这是一个值,它表示以程序方式从客户端站点关闭套接字。
老实说,我只使用了几周的套接字和线程,这就是为什么每个帮助和批评都是可以接受的。...感谢您的回答,但我对心跳编码有疑问。首先,心跳的确切位置必须放在服务器端。