gpt4 book ai didi

qt - QTcpSocket 的 SocketDescriptor 为 -1

转载 作者:可可西里 更新时间:2023-11-01 02:34:44 34 4
gpt4 key购买 nike

我正在为自己设计服务器/客户端系统。我创建了一个扩展自 QTcpServer 的类并定义 QMap <ClientName, int> sockets处理连接的客户端。 sockets 客户端可以连接到服务器 map 不包含具有相同 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);
}

哪里出了问题?

最佳答案

这是QT助手的答案,也许有帮助,

qintptr QTcpServer::socketDescriptor() const

返回服务器用来监听传入指令的 native 套接字描述符,如果服务器未在监听,则返回-1。

如果服务器正在使用 QNetworkProxy,则返回的描述符可能无法用于 native 套接字函数。

关于qt - QTcpSocket 的 SocketDescriptor 为 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19892956/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com