gpt4 book ai didi

c++ - 多线程Qt服务器不回显客户端发送的数据

转载 作者:行者123 更新时间:2023-11-28 06:30:11 25 4
gpt4 key购买 nike

我有一个可以处理多个线程的服务器。服务器启动并监听,但在传入连接挂起时无法回显。

我正在使用 telnet 打开套接字并将数据发送到服务器。但是,服务器只显示它正在监听,但不会回显我通过 telnet 键入的任何数据或表示存在传入连接。我关闭了专用网络的 Windows 防火墙,但仍然……什么都没有。

还尝试查看服务器错误字符串是否有任何有用的信息,但它只是一个空字符串。

这对我来说完全是个谜,如果有人有任何建设性的意见,我们将不胜感激。线程和服务器的代码如下。

server.cpp

#include "myserver.h"

MyServer::MyServer(QObject *parent) :
QTcpServer(parent)
{

}


void MyServer::StartServer()
{
if(!this->listen(QHostAddress::Any,1234))
{
qDebug() << "Could not start server";
}
else
{
qDebug() << "Listening...";
}
}

void MyServer::incomingConnection(int socketDescriptor)
{
qDebug() << socketDescriptor << " Connecting...";
MyThread *thread = new MyThread(socketDescriptor,this);
connect(thread, SIGNAL(finished()),thread, SLOT(deleteLater()));
thread->start();
}

线程.cpp

#include "mythread.h"

MyThread::MyThread(int ID, QObject *parent) :
QThread(parent)
{ this->socketDescriptor = ID;
}

void MyThread::run()
{
qDebug() << socket->errorString();
//thread starts here
qDebug() << socketDescriptor << " Starting thread";
socket = new QTcpSocket();
if(!socket->setSocketDescriptor(this->socketDescriptor))
{
emit error(socket->error());
return;
}

connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()),Qt::DirectConnection);
connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()),Qt::DirectConnection);

qDebug() << socketDescriptor << " Client Connected";

exec();
}

void MyThread::readyRead()
{
QByteArray Data = socket->readAll();

qDebug() << socketDescriptor << " Data in: " << Data;

socket->write(Data);
}

void MyThread::disconnected()
{
qDebug() << socketDescriptor << " Disconnected";

socket->deleteLater();
exit(0);
}

最佳答案

您使用的是哪个版本的 Qt?在 Qt 5 中,函数 incomingConnection 的参数是 qintptr 而不是 int 类型。查看以下链接:

incomingConnection - Qt 5

Qt 5 - Multithreaded server tutorial

关于c++ - 多线程Qt服务器不回显客户端发送的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27739966/

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