crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QServerSocket example падает. неужели баг Qt?
rell
  опции профиля:
сообщение 24.6.2011, 15:41
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 24.6.2011
Пользователь №: 2768

Спасибо сказали: 0 раз(а)




Репутация:   0  


Привет, уважаемые гуру!! Проблема такая. Очень нужно написать на Qt3.3 http-сервер. Благо есть пример под названием httpd, поставляемый с QT. Компилирую. Запускаю. Набираю в бразуере 127.0.0.1 и он падает. Код не изменял. компилирую, как есть. Дебагил - ничего хорошего это не дало. СПАСИБО за помощь!! Вот его код:

#include <stdlib.h>
#include <qsocket.h>
#include <qregexp.h>
#include <qserversocket.h>
#include <qapplication.h>
#include <qmainwindow.h>
#include <qtextstream.h>
#include <qvbox.h>
#include <qlabel.h>
#include <qtextview.h>
#include <qpushbutton.h>

// HttpDaemon is the the class that implements the simple HTTP server.
class HttpDaemon : public QServerSocket
{
    Q_OBJECT
public:
    HttpDaemon( QObject* parent=0 ) :
   QServerSocket(8080,1,parent)
    {
   if ( !ok() ) {
       qWarning("Failed to bind to port 8080");
       exit( 1 );
   }
    }

    void newConnection( int socket )
    {
   // When a new client connects, the server constructs a QSocket and all
   // communication with the client is done over this QSocket. QSocket
   // works asynchronouslyl, this means that all the communication is done
   // in the two slots readClient() and discardClient().
   QSocket* s = new QSocket( this );
   connect( s, SIGNAL(readyRead()), this, SLOT(readClient()) );
   connect( s, SIGNAL(delayedCloseFinished()), this, SLOT(discardClient()) );
   s->setSocket( socket );
   emit newConnect();
    }

signals:
    void newConnect();
    void endConnect();
    void wroteToClient();

private slots:
    void readClient()
    {
   // This slot is called when the client sent data to the server. The
   // server looks if it was a get request and sends a very simple HTML
   // document back.
   QSocket* socket = (QSocket*)sender();
   if ( socket->canReadLine() ) {
       QStringList tokens = QStringList::split( QRegExp("[ \r\n][ \r\n]*"), socket->readLine() );
       if ( tokens[0] == "GET" ) {
      QTextStream os( socket );
      os.setEncoding( QTextStream::UnicodeUTF8 );
      os << "HTTP/1.0 200 Ok\r\n"
          "Content-Type: text/html; charset=\"utf-8\"\r\n"
          "\r\n"
          "<h1>Nothing to see here</h1>\n";
      socket->close();
      emit wroteToClient();
       }
   }
    }
    void discardClient()
    {
   QSocket* socket = (QSocket*)sender();
   delete socket;
   emit endConnect();
    }
};


// HttpInfo provides a simple graphical user interface to the server and shows
// the actions of the server.
class HttpInfo : public QVBox
{
    Q_OBJECT
public:
    HttpInfo()
    {
   HttpDaemon *httpd = new HttpDaemon( this );

   QString itext = QString(
      "This is a small httpd example.\n"
      "You can connect with your\n"
      "web browser to port %1"
       ).arg( httpd->port() );
   QLabel *lb = new QLabel( itext, this );
   lb->setAlignment( AlignHCenter );
   infoText = new QTextView( this );
   QPushButton *quit = new QPushButton( "quit" , this );

   connect( httpd, SIGNAL(newConnect()), SLOT(newConnect()) );
   connect( httpd, SIGNAL(endConnect()), SLOT(endConnect()) );
   connect( httpd, SIGNAL(wroteToClient()), SLOT(wroteToClient()) );
   connect( quit, SIGNAL(pressed()), qApp, SLOT(quit()) );
    }

    ~HttpInfo()
    {
    }

private slots:
    void newConnect()
    {
   infoText->append( "New connection" );
    }
    void endConnect()
    {
   infoText->append( "Connection closed\n\n" );
    }
    void wroteToClient()
    {
   infoText->append( "Wrote to client" );
    }

private:
    QTextView *infoText;
};


int main( int argc, char** argv )
{
    QApplication app( argc, argv );
    HttpInfo info;
    app.setMainWidget( &info );
    info.show();
    return app.exec();
}

#include "httpd.moc"
Причина редактирования: оформление
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.6.2011, 16:27
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


rell, читай - Справка по кнопкам и тэгам форума
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rell
  опции профиля:
сообщение 24.6.2011, 23:45
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 24.6.2011
Пользователь №: 2768

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 24.6.2011, 17:27) *


Прочитал. Спасибо, что подредактировали.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.12.2024, 14:36