当前位置:编程学习 > wap >>

我的多线程客户端为什么无法连接

我的程序大体框架是这样的,一个界面widget,在widget建立线程,在线程中新建一个SOCKET,并实现收发数据的功能。
我的程序:
thread.h
#ifndef THREAD_H
#define THREAD_H
#include <QThread>
#include <QTcpSocket> 
#include <QtNetwork> 

class Thread : public QThread
{
    Q_OBJECT

public:
    Thread(QObject *parent);
    void newConnect();
    QString IP;
    void sendMessage();
protected:
    void run();
   
private:
    QTcpSocket *tcpSocket;
    QString message;

};
#endif // THREAD_H

thread.cpp
#include "Thread.h"
#include <QtGui> 
#include <QtNetwork> 

Thread::Thread(QObject *parent):
QThread(parent)

{
}

void Thread::newConnect()
{
    tcpSocket->abort();
    tcpSocket->connectToHost(IP,6666);
}

void Thread::sendMessage()
{
    QTcpSocket *clientConnection = tcpSocket;
    connect(clientConnection,SIGNAL(disconnected()),clientConnection,SLOT(deleteLater()));
    clientConnection->write("Hello world\0");
}

void Thread::run()
{
    tcpSocket = new QTcpSocket;
    newConnect();
    sendMessage();
}

wigdet.h中关于线程的
private:
    Thread *thread;
widget.cpp中
idget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
 

thread = new Thread(this);
       thread->IP="127.0.0.1";
        thread->start();
}
但是无法与服务器进行连接,如果不放在线程中,就可以连接,为什么? --------------------编程问答-------------------- 我终于明白了,因为run函数里面没有加exec(); --------------------编程问答--------------------
引用 1 楼 huangjun604 的回复:
我终于明白了,因为run函数里面没有加exec();

原来如此啊。。 --------------------编程问答--------------------
引用 1 楼 huangjun604 的回复:
我终于明白了,因为run函数里面没有加exec();


对滴 我也刚写了篇类似的博客说exec()  在socket 通信中 
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,