×

Discussion Board

Results 1 to 2 of 2
  1. #1
    Registered User
    Join Date
    Oct 2009
    Posts
    3

    qt sdk tcp server failed to detect new connection event

    hi,all

    I am newie in Qt for symbian.

    I want to implement a tcp server ,so downloaded QT SDK.

    I run a sample named fortune_server in Emulator.

    when client connect fortune_server , tcp connection is successful. but client didn't receive message from server.

    I set a breakpoint and debug ,and found the server didn't call the function of sendFortune(); It seems server didn't detect new connection?

    And I run fortune_client in Emulator ,it works well.

    Is there anything wrong ? quite puzzled.

    Thanks for your time.



    Below is the source codes :

    #include <QtGui>
    #include <QtNetwork>

    #include <stdlib.h>

    #include "server.h"

    Server::Server(QWidget *parent)
    : QDialog(parent)
    {
    statusLabel = new QLabel;
    quitButton = new QPushButton(tr("Quit"));
    quitButton->setAutoDefault(false);

    //! [0] //! [1]
    tcpServer = new QTcpServer(this);
    if (!tcpServer->listen()) {
    QMessageBox::critical(this, tr("Fortune Server"),
    tr("Unable to start the server: %1.")
    .arg(tcpServer->errorString()));
    close();
    return;
    }
    //! [0]

    statusLabel->setText(tr("The server is running on port %1.\n"
    "Run the Fortune Client example now.")
    .arg(tcpServer->serverPort()));
    //! [1]

    //! [2]
    fortunes << tr("You've been leading a dog's life. Stay off the furniture.")
    << tr("You've got to think about tomorrow.")
    << tr("You will be surprised by a loud noise.")
    << tr("You will feel hungry again in another hour.")
    << tr("You might have mail.")
    << tr("You cannot kill time without injuring eternity.")
    << tr("Computers are not intelligent. They only think they are.");
    //! [2]

    connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
    //! [3]
    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));
    //! [3]

    QHBoxLayout *buttonLayout = new QHBoxLayout;
    buttonLayout->addStretch(1);
    buttonLayout->addWidget(quitButton);
    buttonLayout->addStretch(1);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(statusLabel);
    mainLayout->addLayout(buttonLayout);
    setLayout(mainLayout);

    setWindowTitle(tr("Fortune Server"));
    }

    //! [4]
    void Server::sendFortune()
    {
    //! [5]
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    //! [4] //! [6]
    out << (quint16)0;
    out << fortunes.at(qrand() % fortunes.size());
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));
    //! [6] //! [7]

    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()),
    clientConnection, SLOT(deleteLater()));
    //! [7] //! [8]

    clientConnection->write(block);
    clientConnection->disconnectFromHost();
    //! [5]
    }#include <QtGui>
    #include <QtNetwork>

    #include <stdlib.h>

    #include "server.h"

    Server::Server(QWidget *parent)
    : QDialog(parent)
    {
    statusLabel = new QLabel;
    quitButton = new QPushButton(tr("Quit"));
    quitButton->setAutoDefault(false);

    //! [0] //! [1]
    tcpServer = new QTcpServer(this);
    if (!tcpServer->listen()) {
    QMessageBox::critical(this, tr("Fortune Server"),
    tr("Unable to start the server: %1.")
    .arg(tcpServer->errorString()));
    close();
    return;
    }
    //! [0]

    statusLabel->setText(tr("The server is running on port %1.\n"
    "Run the Fortune Client example now.")
    .arg(tcpServer->serverPort()));
    //! [1]

    //! [2]
    fortunes << tr("You've been leading a dog's life. Stay off the furniture.")
    << tr("You've got to think about tomorrow.")
    << tr("You will be surprised by a loud noise.")
    << tr("You will feel hungry again in another hour.")
    << tr("You might have mail.")
    << tr("You cannot kill time without injuring eternity.")
    << tr("Computers are not intelligent. They only think they are.");
    //! [2]

    connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
    //! [3]
    connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));
    //! [3]

    QHBoxLayout *buttonLayout = new QHBoxLayout;
    buttonLayout->addStretch(1);
    buttonLayout->addWidget(quitButton);
    buttonLayout->addStretch(1);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(statusLabel);
    mainLayout->addLayout(buttonLayout);
    setLayout(mainLayout);

    setWindowTitle(tr("Fortune Server"));
    }

    //! [4]
    void Server::sendFortune()
    {
    //! [5]
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    //! [4] //! [6]
    out << (quint16)0;
    out << fortunes.at(qrand() % fortunes.size());
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));
    //! [6] //! [7]

    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()),
    clientConnection, SLOT(deleteLater()));
    //! [7] //! [8]

    clientConnection->write(block);
    clientConnection->disconnectFromHost();
    //! [5]
    }

  2. #2
    Registered User
    Join Date
    Mar 2009
    Posts
    28

    Re: qt sdk tcp server failed to detect new connection event

    I confirm this bug, I'm trying to use nonblocking API of QTcpSocket, and on emulator (3rd FP1 SDK), connect() signal never get raised. In N95 that signal is emitted and application works.

    Anyway, QTcpSocket's blocking API runs on emulator, so you can use waitForConnected() for testing on emulator.

    Anybody can say if this bug were corrected??
    Last edited by ivansjg; 2010-05-14 at 08:07.

Similar Threads

  1. Failed to connect a TCP client app with a server
    By abolfoooud in forum Symbian Networking & Messaging (Closed)
    Replies: 10
    Last Post: 2008-08-24, 07:47
  2. HTTP Post problem on Symbian 9.2 - TCP stuck?
    By bgenady in forum Symbian Networking & Messaging (Closed)
    Replies: 0
    Last Post: 2008-08-04, 19:33
  3. TCP server packet receiving problem
    By raj_rr7 in forum Symbian Networking & Messaging (Closed)
    Replies: 9
    Last Post: 2007-07-12, 12:24
  4. TCP socket connection between Symbian device and Windows
    By raghucp in forum Symbian Networking & Messaging (Closed)
    Replies: 3
    Last Post: 2003-09-15, 10:15
  5. Http connection problem in 6310i
    By teahola in forum Mobile Java General
    Replies: 1
    Last Post: 2002-10-03, 18:46

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
×