diff options
Diffstat (limited to 'examples/network/clientserver/server')
-rw-r--r-- | examples/network/clientserver/server/server.cpp | 162 | ||||
-rw-r--r-- | examples/network/clientserver/server/server.pro | 9 |
2 files changed, 171 insertions, 0 deletions
diff --git a/examples/network/clientserver/server/server.cpp b/examples/network/clientserver/server/server.cpp new file mode 100644 index 000000000..f80adda84 --- /dev/null +++ b/examples/network/clientserver/server/server.cpp @@ -0,0 +1,162 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for TQt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include <qsocket.h> +#include <qserversocket.h> +#include <qapplication.h> +#include <qvbox.h> +#include <qtextview.h> +#include <qlabel.h> +#include <qpushbutton.h> +#include <qtextstream.h> + +#include <stdlib.h> + + +/* + The ClientSocket class provides a socket that is connected with a client. + For every client that connects to the server, the server creates a new + instance of this class. +*/ +class ClientSocket : public TQSocket +{ + Q_OBJECT +public: + ClientSocket( int sock, TQObject *parent=0, const char *name=0 ) : + TQSocket( parent, name ) + { + line = 0; + connect( this, SIGNAL(readyRead()), + SLOT(readClient()) ); + connect( this, SIGNAL(connectionClosed()), + SLOT(deleteLater()) ); + setSocket( sock ); + } + + ~ClientSocket() + { + } + +signals: + void logText( const TQString& ); + +private slots: + void readClient() + { + TQTextStream ts( this ); + while ( canReadLine() ) { + TQString str = ts.readLine(); + emit logText( tr("Read: '%1'\n").arg(str) ); + + ts << line << ": " << str << endl; + emit logText( tr("Wrote: '%1: %2'\n").arg(line).arg(str) ); + + line++; + } + } + +private: + int line; +}; + + +/* + The SimpleServer class handles new connections to the server. For every + client that connects, it creates a new ClientSocket -- that instance is now + responsible for the communication with that client. +*/ +class SimpleServer : public TQServerSocket +{ + Q_OBJECT +public: + SimpleServer( TQObject* parent=0 ) : + TQServerSocket( 4242, 1, parent ) + { + if ( !ok() ) { + qWarning("Failed to bind to port 4242"); + exit(1); + } + } + + ~SimpleServer() + { + } + + void newConnection( int socket ) + { + ClientSocket *s = new ClientSocket( socket, this ); + emit newConnect( s ); + } + +signals: + void newConnect( ClientSocket* ); +}; + + +/* + The ServerInfo class provides a small GUI for the server. It also creates the + SimpleServer and as a result the server. +*/ +class ServerInfo : public TQVBox +{ + Q_OBJECT +public: + ServerInfo() + { + SimpleServer *server = new SimpleServer( this ); + + TQString itext = tr( + "This is a small server example.\n" + "Connect with the client now." + ); + TQLabel *lb = new TQLabel( itext, this ); + lb->setAlignment( AlignHCenter ); + infoText = new TQTextView( this ); + TQPushButton *tquit = new TQPushButton( tr("Quit") , this ); + + connect( server, SIGNAL(newConnect(ClientSocket*)), + SLOT(newConnect(ClientSocket*)) ); + connect( tquit, SIGNAL(clicked()), qApp, + SLOT(tquit()) ); + } + + ~ServerInfo() + { + } + +private slots: + void newConnect( ClientSocket *s ) + { + infoText->append( tr("New connection\n") ); + connect( s, SIGNAL(logText(const TQString&)), + infoText, SLOT(append(const TQString&)) ); + connect( s, SIGNAL(connectionClosed()), + SLOT(connectionClosed()) ); + } + + void connectionClosed() + { + infoText->append( tr("Client closed connection\n") ); + } + +private: + TQTextView *infoText; +}; + + +int main( int argc, char** argv ) +{ + TQApplication app( argc, argv ); + ServerInfo info; + app.setMainWidget( &info ); + info.show(); + return app.exec(); +} + +#include "server.moc" diff --git a/examples/network/clientserver/server/server.pro b/examples/network/clientserver/server/server.pro new file mode 100644 index 000000000..0a845b5fe --- /dev/null +++ b/examples/network/clientserver/server/server.pro @@ -0,0 +1,9 @@ +TEMPLATE = app +TARGET = server + +CONFIG += qt warn_on release + +REQUIRES = network full-config + +HEADERS = +SOURCES = server.cpp |