我正在为自己设计服务器/客户端系统。我创建了一个扩展自QTcpServer
和定义的类QMap <ClientName, int> sockets
来处理连接的客户端。sockets
当地图不包含与ClientName
新客户端相同的套接字时,客户端可以连接到服务器。因此,当新套接字连接到服务器时,我将客户端存储Pair <ClientName, SocketDescriptor>
在 qmap 中。disconnects
有了这些解释,当客户端来自服务器时,我应该从 qmap 中删除客户端描述符。因此,我创建插槽void disconnected()
并按如下方式实现它:
void MyServer::disconnected()
{
QTcpSocket* socket = (QTcpSocket*) sender();
ClientType socketType = ClientTypeNone;
foreach(ClientType key, _sockets.keys())
{
if (sockets.value(key) == socket.socketDescriptor())
{
socketType = key;
break;
}
}
if (socketType != ClientTypeNone)
{
sockets.remove(socketType);
}
}
但是,socket.socketDescriptor
是-1,而我在下面的代码中设置了它:
void MyServer::inComingConnection(qintptr socketDescriptor)
{
QTcpSocket* socket = nextPendingConnection();
connect(s, SIGNAL(readyRead()), this, SLOT(readyRead());
connect(s, SIGNAL(disconnected()), this, SLOT(disconnected());
socket->setSocketDescriptor(socketDescriptor);
}
出了什么问题?