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