// main.cpp #include <QApplication> #include <QDebug> #include "EchoServer.h" int main( int argc, char *argv[] ) { QApplication app( argc, argv ); EchoServer server; if( !server.start() ) { qDebug() << "Error starting echo-server: " << server.errorString(); return 1; } qDebug() << "Server running"; return app.exec(); }
// EchoServer.h #ifndef ECHOSERVER_H #define ECHOSERVER_H #include <QTcpServer> #include <QTcpSocket> class EchoServer : public QTcpServer { Q_OBJECT public: EchoServer( const unsigned short int port = 12345 ); bool start(); private slots: void connectClient(); void echo(); private: unsigned short int m_port; }; #endif // ECHOSERVER_H
// EchoServer.cpp #include "EchoServer.h" EchoServer::EchoServer( const unsigned short port ) : m_port( port ) { connect( this, SIGNAL( newConnection() ), this, SLOT( connectClient() ) ); } bool EchoServer::start() { return listen( QHostAddress::Any, m_port ); } void EchoServer::connectClient() { QTcpSocket *socket = nextPendingConnection(); connect( socket, SIGNAL( readyRead() ), this, SLOT( echo() ) ); connect( socket, SIGNAL( disconnected() ), socket, SLOT( deleteLater() ) ); } void EchoServer::echo() { QTcpSocket *socket = dynamic_cast<QTcpSocket *>( sender() ); if( socket != NULL ) { QByteArray data = socket->readAll(); socket->write( data ); } }