我正在开发一个经典的服务器/客户端培训项目。
服务器具有连接的客户端的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();
这是我想要开发的代码......但我觉得这个模型很奇怪。 你认为可以有更好的方法来应对这种情况吗?
谢谢