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

时间:2015-01-02 09:30:16

标签: c++ qt networking

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

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

1 个答案:

答案 0 :(得分:1)

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

incomingConnection - Qt 5

Qt 5 - Multithreaded server tutorial