-1

サーバープログラムとクライアントプログラムをqtで書いています。クライアント プログラムは tcp プロトコルによってローカル ホスト ポート 60600 への接続を作成し、サーバー プログラムはそのポートをリッスンします。クライアントが新しい接続を作成した後、サーバーは接続を受け入れ、クライアントにパケットを送信します。正常な状態では、クライアント プログラムとサーバー プログラムのメイン関数に TCPClient クラス オブジェクトと TCPServer クラス オブジェクトを作成し、正常に動作します。

しかし、オブジェクトをスレッドに作成し、メイン関数でスレッドを作成して開始する必要があります。クライアントまたはサーバー オブジェクトを作成するコードを Qthread の run() 関数に移動すると、実行されますが、サーバーとクライアントが正しく動作しません。

サーバーおよびクライアント クラスのコンストラクターの connect() 関数は true を返しますが、接続は機能せず、スロット関数は呼び出されません。

私を助けることができますか?

サーバーコードは次のとおりです。

main.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();
}
4

1 に答える 1