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 = maxon::AioServiceRef::Create() iferr_return;
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;

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
const maxon::String message { buffer };
DiagnosticOutput("Message: @", message);
return maxon::OK;
return maxon::OK;
}
// 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));

Further Reading

maxon
The maxon namespace contains all declarations of the MAXON API.
Definition: c4d_basedocument.h:27
maxon::JOBQUEUE_CURRENT
static const JobQueueInterface::Current JOBQUEUE_CURRENT
Equivalent to calling GetDestinationQueue(), you just save a function call.
Definition: jobqueue.h:352
maxon::String
Definition: string.h:1197
maxon::OK
return OK
Definition: apibase.h:2490
iferr_return
#define iferr_return
Definition: resultbase.h:1434
maxon::BaseArray< Char >
DiagnosticOutput
#define DiagnosticOutput(formatString,...)
Definition: debugdiagnostics.h:168
maxon::Result< void >
maxon::NetworkIpAddrPort
Definition: network_ip_addr.h:438
maxon::BaseArray::Append
MAXON_ATTRIBUTE_FORCE_INLINE ResultRef< T > Append()
Definition: basearray.h:569
iferr_scope
#define iferr_scope
Definition: resultbase.h:1343
maxon::WILDCARD_IPV4_ADDRESS
static const WILDCARD_IPV4_ADDRESS_TYPE WILDCARD_IPV4_ADDRESS
Definition: network_ip_addr.h:45
maxon::Char
char Char
signed 8 bit character
Definition: apibase.h:180
iferr
#define iferr(...)
Definition: errorbase.h:380
maxon::CString
Definition: string.h:1436