我想了解一些关于TCP服务器和套接字,并坚持这种情况。我正在创建服务器并将套接字连接到它。但是我无法为这些套接字获取正确的描述符。但是,当我检查nextPendingConnection时,它具有正确的描述符。QTcpSocket描述符错误
下面是一个简单的代码:
QTcpServer server;
server.listen(QHostAddress::LocalHost, 2500);
QObject::connect(&server, &QTcpServer::newConnection, [&] {
qDebug()<<"New connection recieved!";
QTcpSocket* connection = server.nextPendingConnection();
qDebug()<<"socket descriptor: "<<connection->socketDescriptor(); // here i have some correct descriptor
connection->waitForReadyRead();
});
QTcpSocket *s = new QTcpSocket;
qDebug()<<s->socketDescriptor(); // here i get -1
s->connectToHost(QHostAddress::LocalHost, 2500);
qDebug()<<s->socketDescriptor(); // and here i get -1
奇怪,快速测试(在MacOS)和它的工作对我来说: socket描述:3 socket描述符(C):21 你可以使用Wireshark检查,如果三次握手去通过和一些系统工具(取决于您的操作系统)操作系统认为套接字状态是什么。 –
嗨,Rolf 添加“waitForConnected”后我有新的情况。这里是代码: s-> connectToHost(QHostAddress :: LocalHost,2500); if(!s-> waitForConnected(5000)) qDebug()<<“Error:”<< s-> errorString(); } 所以,我从套接字方法接收描述符,但它们与tcp服务器给我的不同。你有什么想法吗? –
对不起,我之前没有看到这个,因为我没有在我的早期试用中使用它。你不应该使用waitForReadyRead等。他们阻止了电话!您确实需要使用信号和插槽,并连接到准备好的读取信号。这应该解决它我认为。 –