OMNET++ 无线通信客户端-服务器
OMNET++ wireless communication client-server
第一次使用OMNET++
我想从最基本的东西开始了解它是如何工作的。
我成功地创建了我的第一个模拟,其中有两个主机连续交换消息(来自 tictoc 示例)。
我现在想做的是在一个AP和一个无线节点之间模拟一个简单的客户端-服务器无线通信。我正在尝试使用 inet class 中的元素来做到这一点,但我卡住了,它无法正常工作。
import inet.networklayer.configurator.base.NetworkConfiguratorBase;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.networklayer.configurator.ipv4.IPv4NodeConfigurator;
import inet.node.inet.WirelessHost;
import inet.node.wireless.AccessPoint;
import inet.physicallayer.common.packetlevel.RadioMedium;
import inet.physicallayer.contract.packetlevel.IRadioMedium;
import inet.physicallayer.ieee80211.packetlevel.Ieee80211RadioMedium;
//
// TODO documentation
//
network net
{
string mediumType = default("IdealRadioMedium");
@display("bgb=620,426");
submodules:
wirelessHost1: WirelessHost {
@display("p=423,164");
}
accessPoint1: AccessPoint {
@display("p=147,197");
}
iRadioMedium: <mediumType> like IRadioMedium {
@display("p=523,302");
}
iPv4NetworkConfigurator: IPv4NetworkConfigurator {
@display("p=270,324");
assignDisjunctSubnetAddresses = false;
}
}
然后我使用 tictoc beahviour 创建了一个 wirelessHost.cc 源文件来使两个节点通信。
但它不工作,我得到这个错误:
<!> Error in module (inet::IPv4NodeConfigurator) infrastructure.wirelessHost1.networkLayer.configurator (id=13) during network initialization: Configurator module 'configurator' not found (check the 'networkConfiguratorModule' parameter).
但在做某事之前,又是关于接入点的另一个错误(找不到wlan[0]模块)。
有人可以帮助我了解如何配置此模型吗?
编辑
这是配置 .ini 文件
[General]
network = infrastructure
#cmdenv-output-file = omnetpp.log
#debug-on-errors = true
tkenv-plugin-path = ../../../etc/plugins
#record-eventlog = true
**.constraintAreaMinX = 0m
**.constraintAreaMinY = 0m
**.constraintAreaMinZ = 0m
**.constraintAreaMaxX = 600m
**.constraintAreaMaxY = 500m
**.constraintAreaMaxZ = 0m
**.mobility.typename = "StationaryMobility"
**.mobilityType = "StationaryMobility"
# access point
*.accessPoint.wlan[0].mac.address = "004444444444"
*.accessPoint.wlan[0].radio.channelNumber = 11
# host1 is associated with AP1 on channel 0
**.wirelessHost1.wlan[0].mgmt.accessPointAddress = "004444444444"
*.wirelessHost1.**.mgmtType = "Ieee80211MgmtSTASimplified"
# global data rates
**.wlan*.bitrate = 11Mbps
# application level: host1 pings host2
**.numPingApps = 1
*.wirelessHost1.pingApp[0].destAddr = "accessPoint"
*.wirelessHost1.pingApp[0].sendInterval = 10ms
但是运行我得到的模拟
<!> Error in module (inet::ICMP) infrastructure.wirelessHost1.networkLayer.icmp (id=17) at event #4, t=0.008442657441: check_and_cast(): cannot cast (inet::GenericNetworkProtocolControlInfo*) to type 'inet::IPv4ControlInfo *'.
网络 中 IPv4NetworkConfigurator
的实例必须 命名为 configurator
。改名后你的第二个问题也应该解决了。
此外,RadioMedium
实例模块的名称必须是:radioMedium
(而不是iRadioMedium
)。
编辑
你犯了两个错误。
AccessPoint
没有网络层,因为它只使用MAC层中继和发送MAC帧和 MAC 地址 - 就像在真实网络中一样。因此,它没有 IP 地址,也无法向其发送 ICMP ping。
OMNeT++
允许在 ini
文件中使用模块名称而不是 IP 地址,例如 **.destAddr = "wirelessHost1"
。在您的 ini
中,您正在尝试使用不存在的 accessPoint
而不是 accessPoint1
(这是不正确的,因为第一个错误)。
我建议添加一个新的 WirelesHost
(例如 wirelessHost2
)并向其发送 ping,即
*.wirelessHost1.pingApp[0].destAddr = "wirelessHost2"
第一次使用OMNET++
我想从最基本的东西开始了解它是如何工作的。 我成功地创建了我的第一个模拟,其中有两个主机连续交换消息(来自 tictoc 示例)。
我现在想做的是在一个AP和一个无线节点之间模拟一个简单的客户端-服务器无线通信。我正在尝试使用 inet class 中的元素来做到这一点,但我卡住了,它无法正常工作。
import inet.networklayer.configurator.base.NetworkConfiguratorBase;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.networklayer.configurator.ipv4.IPv4NodeConfigurator;
import inet.node.inet.WirelessHost;
import inet.node.wireless.AccessPoint;
import inet.physicallayer.common.packetlevel.RadioMedium;
import inet.physicallayer.contract.packetlevel.IRadioMedium;
import inet.physicallayer.ieee80211.packetlevel.Ieee80211RadioMedium;
//
// TODO documentation
//
network net
{
string mediumType = default("IdealRadioMedium");
@display("bgb=620,426");
submodules:
wirelessHost1: WirelessHost {
@display("p=423,164");
}
accessPoint1: AccessPoint {
@display("p=147,197");
}
iRadioMedium: <mediumType> like IRadioMedium {
@display("p=523,302");
}
iPv4NetworkConfigurator: IPv4NetworkConfigurator {
@display("p=270,324");
assignDisjunctSubnetAddresses = false;
}
}
然后我使用 tictoc beahviour 创建了一个 wirelessHost.cc 源文件来使两个节点通信。
但它不工作,我得到这个错误:
<!> Error in module (inet::IPv4NodeConfigurator) infrastructure.wirelessHost1.networkLayer.configurator (id=13) during network initialization: Configurator module 'configurator' not found (check the 'networkConfiguratorModule' parameter).
但在做某事之前,又是关于接入点的另一个错误(找不到wlan[0]模块)。 有人可以帮助我了解如何配置此模型吗?
编辑 这是配置 .ini 文件
[General]
network = infrastructure
#cmdenv-output-file = omnetpp.log
#debug-on-errors = true
tkenv-plugin-path = ../../../etc/plugins
#record-eventlog = true
**.constraintAreaMinX = 0m
**.constraintAreaMinY = 0m
**.constraintAreaMinZ = 0m
**.constraintAreaMaxX = 600m
**.constraintAreaMaxY = 500m
**.constraintAreaMaxZ = 0m
**.mobility.typename = "StationaryMobility"
**.mobilityType = "StationaryMobility"
# access point
*.accessPoint.wlan[0].mac.address = "004444444444"
*.accessPoint.wlan[0].radio.channelNumber = 11
# host1 is associated with AP1 on channel 0
**.wirelessHost1.wlan[0].mgmt.accessPointAddress = "004444444444"
*.wirelessHost1.**.mgmtType = "Ieee80211MgmtSTASimplified"
# global data rates
**.wlan*.bitrate = 11Mbps
# application level: host1 pings host2
**.numPingApps = 1
*.wirelessHost1.pingApp[0].destAddr = "accessPoint"
*.wirelessHost1.pingApp[0].sendInterval = 10ms
但是运行我得到的模拟
<!> Error in module (inet::ICMP) infrastructure.wirelessHost1.networkLayer.icmp (id=17) at event #4, t=0.008442657441: check_and_cast(): cannot cast (inet::GenericNetworkProtocolControlInfo*) to type 'inet::IPv4ControlInfo *'.
网络 中 IPv4NetworkConfigurator
的实例必须 命名为 configurator
。改名后你的第二个问题也应该解决了。
此外,RadioMedium
实例模块的名称必须是:radioMedium
(而不是iRadioMedium
)。
编辑
你犯了两个错误。
AccessPoint
没有网络层,因为它只使用MAC层中继和发送MAC帧和 MAC 地址 - 就像在真实网络中一样。因此,它没有 IP 地址,也无法向其发送 ICMP ping。OMNeT++
允许在ini
文件中使用模块名称而不是 IP 地址,例如**.destAddr = "wirelessHost1"
。在您的ini
中,您正在尝试使用不存在的accessPoint
而不是accessPoint1
(这是不正确的,因为第一个错误)。
我建议添加一个新的 WirelesHost
(例如 wirelessHost2
)并向其发送 ping,即
*.wirelessHost1.pingApp[0].destAddr = "wirelessHost2"