QT5:多线程Tcp服务器不向用户发送数据

时间:2015-10-26 18:42:28

标签: c++ multithreading qt tcp

我是QT5的新手,决定创建简单的多线程tcp服务器。我已经阅读了QT中提供的示例,但它们具有额外的功能和复杂性,我现在正试图避免这些功能和复杂性。这是我的代码:

server.h

#ifndef SERVER_H
#define SERVER_H

#include <QTcpServer>
#include <QTcpSocket>
#include "threadz.h"
class Server : public QTcpServer
{
  Q_OBJECT
  public:
  explicit Server(QObject *parent = 0);

 signals:

 public slots:
  void newConnection();
 private:
  QTcpServer *serv;

};

#endif // SERVER_H



threadz.h

#ifndef THREADZ_H
#define THREADZ_H

#include <QThread>
#include <QDebug>
#include "server.h"
class Threadz : public QThread
{
  Q_OBJECT

  public:
   explicit Threadz(QObject *parent = 0);
   void run(QTcpServer *serv);

  signals:

  public slots:

};

#endif // THREADZ_H



server.cpp

#include "server.h"

Server::Server(QObject *parent) :
   QTcpServer(parent)
{
  serv = new QTcpServer(this);

  connect(serv, SIGNAL(newConnection()), this, SLOT(newConnection()));

  if(!serv->listen(QHostAddress::Any, 1234))
  {
    qDebug() << "Error";
  }

}

void Server::newConnection()
{
   Threadz *thred = new Threadz();
   thred->start();

}



threadz.cpp

#include "threadz.h"
Threadz::Threadz(QObject *parent) :
  QThread(parent)
{
}


void Threadz::run(QTcpServer *serv)
{
  QTcpSocket *socket  = serv->nextPendingConnection();

  socket->write("Hello!r\n");
  socket->waitForBytesWritten();
  socket->close();


}



的main.cpp

#include <QCoreApplication>
#include "simplehttp.h"
#include "server.h"
int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);

  Server gio;


  return a.exec();
}

基本上,我试图为连接服务器的每个客户端创建新线程。但问题是,当我运行此代码并使用 telnet 127.0.0.1 1234 连接服务器时,屏幕上不会打印任何内容。没有错误,但也没有打印任何内容。我正在使用ubuntu 14.04。对不起,如果问题很愚蠢并提前感谢。

1 个答案:

答案 0 :(得分:2)

QThread::run功能未实现。

  

void QThread::run() [virtual protected]

     

线程的起点。在调用start()之后,新创建的线程调用此函数。默认实现只是调用exec()。

     

您可以重新实现此功能以促进高级线程管理。从此方法返回将结束线程的执行。

相反,您实施了void Threadz::run(QTcpServer *serv),但需要调用此功能