我通过 qt 路由了一个服务器程序和一个客户端程序。客户端程序通过 tcp 协议创建到本地主机端口 60600 的连接,服务器程序监听该端口。客户端创建新连接后,服务器接受连接并向客户端发送数据包。在正常情况下,我在客户端和服务器程序的主要功能中创建了 TCPClient 类对象和 TCPServer 类对象,它可以正常工作。
但我需要在线程中创建对象并在主函数中创建和启动线程。当我将创建客户端或服务器对象的代码移动到 Qthread 的 run() 函数时,它运行但服务器和客户端无法正常工作。
服务器和客户端类的构造函数中的 connect() 函数返回 true,但连接不起作用并且插槽函数不调用。
有什么可以帮助我的吗?
服务器代码在这里:
主.cpp:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
......
PgThread* MyThread = new PgThread( d );
MyThread->start();
......
return app.exec();
}
PgThread.cpp
PgThread::PgThread( int packetsizein )
{
packetsize = packetsizein;
//connect( this, SIGNAL(finished()), this, SLOT(finishedReq() ));
}
PgThread::~PgThread
()
{
delete server;
}
void PgThread::run()
{
server = new tcpserver(packetsize);
}
tcpserver.cpp:
tcpserver::tcpserver(int packsize)
{
packetSize = packsize;
server = new QTcpServer(this);
server -> listen( QHostAddress::Any,60600 );
connect( server,SIGNAL(newConnection()),this,SLOT(newConnectionRequest()) );
}
void tcpserver::newConnectionRequest()//does not call when tcpserver object create in run comnmand of pgthread
{
i=i+1;
QTcpSocket *clientConnection = server->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()));
QByteArray block;
char c;
c=(char)i;
block.append(c);
for (int k=1;k<packetSize;k++)
block.append('A');
clientConnection->write(block);
clientConnection->flush();
qint64 current = QDateTime::currentMSecsSinceEpoch();
if(forDebug)
cout << "start time: " <<current<<endl;
else
cout << i << "\n" << current << endl;
clientConnection->disconnectFromHost();
}