Open Search
    TCP Manual

    About

    The Transmission Control Protocol allows to create network connections to remote machines in order to send data. The maxon::NetworkTcpInterface is used to create either an outgoing connection to send TCP/IP data or to create an server to receive such data.

    Note
    The TCP interface uses an AioService. See maxon::AioServiceInterface.

    NetworkTcpInterface

    The maxon::NetworkTcpInterface provides these functions:

    NetworkTcpServerInterface

    The maxon::NetworkTcpServerInterface defines a TCP server that reacts to incoming TCP connections:

    // This example starts a TCP server. The behaviour on an incoming
    // connection is defined with the given callback function.
    // create AioService
    g_tcpIoService.Start() iferr_return;
    // create and start server
    g_tcpServer = maxon::NetworkTcpInterface::CreateServer(localAddr, TCPServerCallback, g_tcpIoService, maxon::JOBQUEUE_CURRENT) iferr_return;
    g_tcpServer.Start() iferr_return;
    Definition: network_ip_addr.h:444
    static auto Create(ARGS &&... args)
    Definition: apibase.h:2829
    static const JobQueueInterface::Current JOBQUEUE_CURRENT
    Equivalent to calling GetDestinationQueue(), you just save a function call.
    Definition: jobqueue.h:377
    The maxon namespace contains all declarations of the MAXON API.
    Definition: autoweight.h:14
    static const WILDCARD_IPV4_ADDRESS_TYPE WILDCARD_IPV4_ADDRESS
    Definition: network_ip_addr.h:45
    #define iferr_return
    Definition: resultbase.h:1524

    For an example on the callback function see below.

    NetworkTcpConnectionInterface

    The maxon::NetworkTcpConnectionInterface represents an established TCP connection. This connection can receive data from the remote machine or send data to that machine.

    // This example shows a callback function that defines the behaviour of a TCP server for an incoming TCP connection.
    static maxon::Result<void> TCPServerCallback(maxon::Result<void> res, maxon::NetworkTcpConnectionRef connection)
    {
    // print remote address
    const maxon::NetworkIpAddrPort remote = connection.GetRemoteAddress();
    DiagnosticOutput("Connected with @", remote);
    // define receive callback
    connection.Receive(
    {
    // print received message
    DiagnosticOutput("Message: @", message);
    return maxon::OK;
    return maxon::OK;
    }
    const char ** buffer
    Definition: abstract.h:327
    Definition: string.h:1235
    const char * message
    Definition: pyerrors.h:189
    Py_UCS4 * res
    Definition: unicodeobject.h:1113
    return OK
    Definition: apibase.h:2746
    #define DiagnosticOutput(formatString,...)
    Definition: debugdiagnostics.h:170
    #define iferr_scope
    Definition: resultbase.h:1389
    // This example opens a TCP connection to a remote host and sends some data.
    // prepare AioServiceRef
    const maxon::AioServiceRef service = maxon::AioServiceRef::Create() iferr_return;
    service.Start() iferr_return;
    // open TCP connection
    maxon::NetworkTcpInterface::OpenOutgoingConnection(remoteAddr,
    [](maxon::Result<void>, maxon::NetworkTcpConnectionRef connection) -> maxon::Result<void>
    {
    // prepare message
    maxon::CString messageCStr("Test Message");
    for (const maxon::Char c: messageCStr)
    {
    iferr (buffer.Append(c))
    err.DbgStop();
    }
    // send message
    return connection.Send(std::move(buffer));
    Definition: string.h:1490
    Py_UNICODE c
    Definition: unicodeobject.h:1200
    char Char
    signed 8 bit character
    Definition: apibase.h:209
    #define iferr(...)
    Definition: errorbase.h:388

    Further Reading