你会如何处理一个服务器的情况 - 许多客户?

时间:2013-12-21 16:42:06

标签: c++ sockets client-server

我正在开发一个经典的服务器/客户端培训项目。

服务器具有连接的客户端的ServerClient列表。我想处理从ServerClient对象中连接客户端连接的情况,然后自行销毁...

我开发了一个Server类,它在客户端连接时返回ServerClient对象。然后ServerClient类有一个名为close()的成员函数,需要关闭服务器客户端套接字并销毁ServerClient对象。

class ServerClient {
private:
    Socket *socket;
    Server *server;
public:
    ServerClient::ServerClient (Socket *cs, Server *ss) : server(0), socket(0) {
        socket = cs;
        server = ss;
    }
    Socket *getSocket() {
        return socket;
    }
    void close() {
        server->closeClient(this);
    }
}

class Server {
private:
    std::vector<ServerClient*> clients;
public:
    ServerClient *acceptClient() {
        ... // accept client etc...
        ServerClient *sc = new ServerClient(this);
        clients.push_back(sc);
        return sc;
    }
    void closeClient(ServerClient *client) {
        // close the client socket
        client->getSocket()->close();
        ... // remove the client from the clients list
        // delete the client reference (I'll have care never using client object outside)
        delete client;
    }
}

// this way I can close the client connection and update server clients list
....
client->close();

这是我想要开发的代码......但我觉得这个模型很奇怪。 你认为可以有更好的方法来应对这种情况吗?

谢谢

0 个答案:

没有答案