TcpServerHostApp

Package: inet.applications.tcpapp

TcpServerHostApp

simple module

This module hosts TCP-based server applications. It dynamically creates and launches a new "thread" object for each incoming connection.

Server threads should be subclassed from the TcpServerThreadBase C++ class, registered in the C++ code using the Define_Module() macro, and the module type should be specified in the serverThreadModuleType parameter of TcpServerHostApp. The thread object will receive events via a callback interface (methods like established(), dataArrived(), peerClosed(), timerExpired()), and can send packets via TcpSocket's send() method.

IMPORTANT: Before you try to use this module, make sure you actually need it! In most cases, TcpGenericServerApp and GenericAppMsg will be completely enough, and they are a lot easier to handle. You'll want to subclass your client from TCPGenericCliAppBase then; check TelnetApp and TcpBasicClientApp for examples.

Compatible with both Ipv4 and Ipv6.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Known subclasses

Name Type Description
TcpEchoApp simple module

Accepts any number of incoming TCP connections, and sends back the messages that arrive on them, The lengths of the messages are multiplied by echoFactor before sending them back (echoFactor=1 will result in sending back the same message unmodified.) The reply can also be delayed by a constant time (echoDelay parameter).

TcpSinkApp compound module

Accepts any number of incoming TCP connections, and discards whatever arrives on them. Compatible with both Ipv4 and Ipv6.

Parameters

Name Type Default value Description
localAddress string ""

may be left empty ("")

localPort int 1000

port number to listen on

serverThreadModuleType string

module type of "thread" module to launch on incoming connections

stopOperationExtraTime double -1s

extra time after lifecycle stop operation finished

stopOperationTimeout double 2s

timeout value for lifecycle stop operation

Properties

Name Value Description
display i=block/app
lifecycleSupport

Gates

Name Direction Size Description
socketIn input
socketOut output

Source code

//
// This module hosts TCP-based server applications. It dynamically creates
// and launches a new "thread" object for each incoming connection.
//
// Server threads should be subclassed from the TcpServerThreadBase
// C++ class, registered in the C++ code using the Define_Module() macro,
// and the module type should be specified in the serverThreadModuleType
// parameter of ~TcpServerHostApp. The thread object will receive events
// via a callback interface (methods like established(), dataArrived(),
// peerClosed(), timerExpired()), and can send packets via TcpSocket's send()
// method.
//
// IMPORTANT: Before you try to use this module, make sure you actually need it!
// In most cases, ~TcpGenericServerApp and ~GenericAppMsg will be completely
// enough, and they are a lot easier to handle. You'll want to subclass your
// client from TCPGenericCliAppBase then; check ~TelnetApp and ~TcpBasicClientApp
// for examples.
//
// Compatible with both ~Ipv4 and ~Ipv6.
//
simple TcpServerHostApp like IApp
{
    parameters:
        string localAddress = default(""); // may be left empty ("")
        int localPort = default(1000); // port number to listen on
        string serverThreadModuleType; // module type of "thread" module to launch on incoming connections
        @display("i=block/app");
        @lifecycleSupport;
        double stopOperationExtraTime @unit(s) = default(-1s);    // extra time after lifecycle stop operation finished
        double stopOperationTimeout @unit(s) = default(2s);    // timeout value for lifecycle stop operation
    gates:
        input socketIn @labels(TcpCommand/up);
        output socketOut @labels(TcpCommand/down);
}

File: src/inet/applications/tcpapp/TcpServerHostApp.ned