TcpServerTransport¶
class nmeasim::io::TcpServerTransport · Library API
Listens for TCP clients and sends every line to all of them.
#include <nmeasim/io/transports/tcp_server_transport.hpp>
Inherits nmeasim::io::Transport
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp (line 30)
Any number of clients may connect; each receives every line written after it connected. A client that disconnects or reports a socket error is removed at once, and data received from clients is discarded, since the simulator only talks. client_count_changed is emitted whenever a client is added or removed. Errors while accepting a connection are reported through error_occurred and leave the server open.
Summary¶
Public member functions
| Name | Description |
|---|---|
TcpServerTransport() |
Creates a closed server; it starts listening in open. |
~TcpServerTransport() |
Destroys the transport, closing it and every client connection first. |
description() |
Returns the bind address and the port. |
open() |
Starts listening on the bind address and port. |
close() |
Closes every client connection, stops listening and moves to State::Closed. |
write() |
Queues line on the socket of every connected client. |
client_count() |
Returns the number of connected clients. |
port() |
Returns the TCP port of the server. |
Private member functions
| Name | Description |
|---|---|
accept_connections() |
Takes every pending connection from the server, starts tracking it and emits client_count_changed. |
drop_client() |
Stops tracking client, schedules its deletion and emits client_count_changed. |
Private data members
| Name | Description |
|---|---|
server_ |
The listening socket; the Qt parent of every accepted client socket. |
clients_ |
Connected clients, in order of connection. |
requested_port_ |
Port passed to the constructor; 0 for a port chosen by the operating system. |
bind_address_ |
Local address to listen on. |
Public member functions¶
TcpServerTransport()¶
explicit TcpServerTransport(
quint16 port,
QHostAddress bind_address = QHostAddress::Any,
QObject* parent = nullptr)
Creates a closed server; it starts listening in open.
Parameters
| Name | Type | Description |
|---|---|---|
port |
quint16 |
TCP port to listen on; 0 asks the operating system for a free port, which port returns once the server is open. |
bind_address |
QHostAddress |
Local address to listen on. The default QHostAddress::Any accepts connections on every interface, IPv4 and IPv6; QHostAddress::LocalHost accepts local connections only. |
parent |
QObject* |
Qt parent that owns the transport; null leaves ownership to the caller. |
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:42 · defined in src/io/src/transports/tcp_server_transport.cpp:12
~TcpServerTransport()¶
~TcpServerTransport() override
Destroys the transport, closing it and every client connection first.
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:45 · defined in src/io/src/transports/tcp_server_transport.cpp:19
description()¶
QString description() const override
Returns the bind address and the port.
Returns QString: For example TCP server on 127.0.0.1:10110, with the port actually listened on while open.
Overrides description · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:51 · defined in src/io/src/transports/tcp_server_transport.cpp:23
open()¶
bool open() override
Starts listening on the bind address and port.
Returns true at once when already open. Fails with Cannot listen on <address>:<port> and the reason, for example when the port is already in use or needs privileges.
Returns bool: True when the server listens, false when listening failed.
Overrides open · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:58 · defined in src/io/src/transports/tcp_server_transport.cpp:27
close()¶
void close() override
Closes every client connection, stops listening and moves to State::Closed.
Emits client_count_changed with 0, even when no client was connected.
Overrides close · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:62 · defined in src/io/src/transports/tcp_server_transport.cpp:43
write()¶
void write(const QByteArray& line) override
Queues line on the socket of every connected client.
Does nothing when no client is connected. Each socket sends asynchronously; the transport sets no limit on how much a slow client can have queued.
Parameters
| Name | Type | Description |
|---|---|---|
line |
const QByteArray& |
One complete line, terminator included. |
Overrides write · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:69 · defined in src/io/src/transports/tcp_server_transport.cpp:58
client_count()¶
int client_count() const override
Returns the number of connected clients.
Returns int: The clients accepted and not yet removed; 0 while closed.
Overrides client_count · Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:73 · defined in src/io/src/transports/tcp_server_transport.cpp:69
port()¶
quint16 port() const
Returns the TCP port of the server.
Returns quint16: The port actually listened on while open, which is the one chosen by the operating system when 0 was requested; otherwise the requested port.
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:79 · defined in src/io/src/transports/tcp_server_transport.cpp:73
Private member functions¶
accept_connections()¶
void accept_connections()
Takes every pending connection from the server, starts tracking it and emits client_count_changed.
Connected to QTcpServer::newConnection.
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:84 · defined in src/io/src/transports/tcp_server_transport.cpp:77
drop_client()¶
void drop_client(QTcpSocket* client)
Stops tracking client, schedules its deletion and emits client_count_changed.
Connected to the disconnected and errorOccurred signals of every client; a client that is no longer tracked is ignored, so a client reporting both is removed once.
Parameters
| Name | Type | Description |
|---|---|---|
client |
QTcpSocket* |
The client socket to remove; owned by server_. |
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:91 · defined in src/io/src/transports/tcp_server_transport.cpp:89
Private data members¶
server_¶
QTcpServer server_
The listening socket; the Qt parent of every accepted client socket.
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:94
clients_¶
QList<QTcpSocket *> clients_
Connected clients, in order of connection.
The sockets are owned by server_ and deleted with deleteLater when removed.
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:97
requested_port_¶
quint16 requested_port_
Port passed to the constructor; 0 for a port chosen by the operating system.
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:99
bind_address_¶
QHostAddress bind_address_
Local address to listen on.
Declared in src/io/include/nmeasim/io/transports/tcp_server_transport.hpp:101
Inherited members¶
From nmeasim::io::TcpServerTransport: bytes_written(), client_count_changed(), count_bytes(), error_occurred(), fail(), is_open(), last_error(), set_state(), State, state(), state_changed(), Transport()