TcpClientApp¶
Package: inet.applications.tcpapp
compound module TcpClientApp
A generic, very modular TCP client application, similar to TcpServerApp. The traffic source and traffic sink modules can be built from queueing model elements.
See also: TcpServerApp
Usage diagram¶
Inheritance diagram¶
Properties¶
Name |
Value |
Description |
|---|---|---|
application |
||
display |
i=block/app |
Gates¶
Name |
Direction |
Size |
Description |
|---|---|---|---|
socketIn |
input |
||
socketOut |
output |
Unassigned submodule parameters¶
Name |
Type |
Default value |
Description |
|---|---|---|---|
source.displayStringTextFormat |
string |
“created %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
source.packetNameFormat |
string |
“%a-%c” |
See directives in module documentation |
source.packetRepresentation |
string |
“byteCount” |
Determines the chunk of the packet data |
source.packetProtocol |
string |
“unknown” |
|
source.packetLength |
int |
||
source.packetData |
int |
-1 |
|
source.attachCreationTimeTag |
bool |
true |
|
source.attachIdentityTag |
bool |
true |
|
source.attachDirectionTag |
bool |
true |
|
source.clockModule |
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
source.initialProductionOffset |
double |
-1s |
Initial duration before which packets are not produced. When negative, then produce packet in initialize() |
source.productionInterval |
double |
Elapsed time between subsequent packets pushed to the connected packet consumer |
|
source.scheduleForAbsoluteTime |
bool |
true |
When a clock is used, “relative” means that setting the clock will not affect the simulation time of the event |
sink.displayStringTextFormat |
string |
“received %p pk (%l)” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
sink.clockModule |
string |
“” |
Relative path of a module that implements IClock(1,:ref:2 <neddoc-msg-inet-iclock>); optional |
sink.initialConsumptionOffset |
double |
0s |
Initial duration before which packets are not consumed |
sink.consumptionInterval |
double |
0s |
Elapsed time between subsequent packets allowed to be pushed by the connected packet producer, 0 means any number of packets can be pushed at the same simulation time |
sink.scheduleForAbsoluteTime |
bool |
true |
When a clock is used, “relative” means that setting the clock will not affect the simulation time of the event |
io.displayStringTextFormat |
string |
“” |
Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information |
io.localAddress |
string |
“” |
|
io.localPort |
int |
-1 |
|
io.connectAddress |
string |
||
io.connectPort |
int |
||
io.autoRead |
bool |
true |
Whether to use “autoread” or “explicit-read” mode for TCP connection |
io.readSize |
int |
-1B |
Used only with autoRead==false |
io.readDelay |
double |
-1s |
Used only with autoRead==false; delay for issuing a READ command after the previous READ was satisfied; -1 means immediately, 0 means zero delay |
Source code¶
//
// A generic, very modular TCP client application, similar to
// ~TcpServerApp. The traffic source and traffic sink modules can be built from
// queueing model elements.
//
// @see ~TcpServerApp
//
module TcpClientApp like IApp
{
parameters:
@application;
@display("i=block/app");
gates:
input socketIn;
output socketOut;
submodules:
source: <default("ActivePacketSource")> like IActivePacketSource if typename != "" {
parameters:
@display("p=200,150");
}
tagger: <default("")> like IPacketFlow {
parameters:
@display("p=200,300");
}
measurementStarter: <default("")> like IPacketFlow {
parameters:
@display("p=200,450");
}
sink: <default("PassivePacketSink")> like IPassivePacketSink if typename != "" {
parameters:
@display("p=500,150");
}
measurementRecorder: <default("")> like IPacketFlow {
parameters:
@display("p=500,450");
}
io: TcpClientSocketIo {
parameters:
@display("p=350,600");
}
connections allowunconnected:
source.out --> tagger.in if exists(source);
tagger.out --> measurementStarter.in;
measurementStarter.out --> io.trafficIn;
io.socketOut --> socketOut;
socketIn --> io.socketIn;
io.trafficOut --> measurementRecorder.in;
measurementRecorder.out --> sink.in if exists(sink);
}