Package: inet.applications.tcpapp
TcpServerHostApp
simple moduleThis 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