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

Multithreaded Qt server not echoing data sent by client

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

我正在使用 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();
}

thread.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