0

双方向通信を確立するために、qt の QTcpSocket および QTcpServer クラスを使用しました。クライアントからサーバーにデータを送信できます。しかし、サーバーから応答が返されません。つまり、client.cpp が readyRead() シグナルを起動しません。Wireshark を使用して、サーバーからのデータが指定されたポートで利用できることを確認しました。

client.cpp コードを投稿しています (助けてください):

Client::Client(QObject* parent): QObject(parent)
{
    socket = new QTcpSocket(this);
    connect(socket, SIGNAL(connected()),
            this, SLOT(startTransfer()));
    connect(socket, SIGNAL(readyRead()),this, SLOT(startRead()));
    connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(socketError(QAbstractSocket::SocketError)) );


}

Client::~Client()
{
    socket->close();
}

void Client::start(QString address, quint16 port)
{
    addr.setAddress(address);
    socket->connectToHost(addr,port,QTcpSocket::ReadWrite);
}

void Client::startTransfer()
{
    printf("Connection established.\n");
    char buffer[1024];
    forever
    {
    printf(">> ");
    gets(buffer);
    int len = strlen(buffer);
    buffer[len] = '\n';
    buffer[len+1] = '\0';
    socket->write(buffer);
    socket->flush();

}
}

void Client::startRead()
{
    cout<<"inside startRead()<<endl";
    while(socket->canReadLine())
       {
       QByteArray ba = socket->readLine();
       if(strcmp(ba.constData(), "!exit\n") == 0)
       {
       socket->disconnectFromHost();
       break;
       }
       printf(">> %s", ba.constData());
}
}

void Client::socketError(QAbstractSocket::SocketError )
    {
    qDebug()<<"error" ;
    }
4

2 に答える 2

2

foreverここにループがあるようです。これは、を呼び出した後、Qtメインがコントロールを取得しないことを意味します。無限ループで実行スレッドをブロックした場合、どのようにコードを実行する必要があると思いますか?eventloopstartTransfer()QtstartRead()

于 2013-05-13T12:11:04.163 に答える