/** * @file EchoServer.cpp * @brief Simple TCP echo server for a single port. */ #include "EchoServer.h" #include EchoServer::EchoServer (quint16 port, const char *name, QObject *parent) : QTcpServer (parent), m_name (name), m_port (port) { connect (this, &QTcpServer::newConnection, this, &EchoServer::onNewConnection); if (!listen (QHostAddress::Any, port)) qCritical ("Failed to listen on %s port %d: %s", m_name, m_port, qPrintable (errorString ())); else qInfo ("Listening on %s port %d", m_name, m_port); } void EchoServer::onNewConnection () { while (auto *sock = nextPendingConnection ()) { qInfo ("[%s:%d] client connected", m_name, m_port); connect (sock, &QTcpSocket::readyRead, this, &EchoServer::onClientReadyRead); connect (sock, &QTcpSocket::disconnected, this, &EchoServer::onClientDisconnected); } } void EchoServer::onClientReadyRead () { auto *sock = qobject_cast (sender ()); QByteArray data = sock->readAll (); qInfo ("[%s:%d] echo %lld bytes", m_name, m_port, data.size ()); sock->write (data); } void EchoServer::onClientDisconnected () { auto *sock = qobject_cast (sender ()); qInfo ("[%s:%d] client disconnected", m_name, m_port); sock->deleteLater (); }