IP_Address::IsBroadcast
方法
语法
capl
long IP_Address::IsBroadcast();
功能
检查当前IP地址是否为广播地址(如IPv4的 255.255.255.255)。
返回值
- 1:是广播地址
- 0:不是广播地址
可用性
- 版本:12.0及以上
- 支持:以太网测量/仿真测试环境
示例
capl
void DoSomething(IP_Address addr) {
if (addr.IsBroadcast()) {
// 处理广播地址逻辑
}
}
IP_Address::IsIPv4Address
方法
语法
capl
long IP_Address::IsIPv4Address();
功能
检查当前IP地址是否为IPv4地址(如 192.168.1.2)。
返回值
- 1:是IPv4地址
- 0:不是IPv4地址
可用性
- 版本:12.0及以上
- 支持:以太网测量/仿真测试环境
示例
capl
void DoSomething(IP_Address addr) {
if (addr.IsIPv4Address()) {
// 处理IPv4地址逻辑
}
}
IP_Address::IsIPv6Address
方法
语法
capl
long IP_Address::IsIPv6Address();
功能
检查当前IP地址是否为IPv6地址(如 FC00::1)。
返回值
- 1:是IPv6地址
- 0:不是IPv6地址
可用性
- 版本:12.0及以上
- 支持:以太网测量/仿真测试环境
示例
同 IP_Address::IsIPv4Address 示例。
IP_Address::IsMulticast
方法
语法
capl
long IP_Address::IsMulticast();
功能
检查当前IP地址是否为组播地址(如IPv4的 239.0.0.1 或IPv6的 FF02::1)。
返回值
- 1:是组播地址
- 0:不是组播地址
可用性
- 版本:12.0及以上
- 支持:以太网测量/仿真测试环境
示例
capl
void DoSomething(IP_Address addr) {
if (addr.IsMulticast()) {
// 处理组播地址逻辑
}
}
IP_Address::MatchesAddress
方法
语法
cpp
long IP_Address::MatchesAddress (IP_Address ipAddr); // 形式1
long IP_Address::MatchesAddress (IP_Address ipAddr, long prefix); // 形式2
功能
比较两个IP地址,通配符始终匹配。若未设置地址类型或地址为0.0.0.0(IPv4)/::0(IPv6),则视为通配符。形式2仅考虑IP地址的网络部分(由前缀指定)。
参数
ipAddr:可能包含通配符的IP_Address对象。prefix:前缀长度(比特数),仅考虑指定的前几位。
返回值
0:不匹配1:匹配
可用性
- 版本:12.0及以上
- 适用场景:以太网测量/仿真测试
示例
cpp
// 示例1:基础匹配
on start {
IP_Address 192.168.1.1 addr1;
IP_Address 192.168.1.2 addr2;
if (addr1.MatchesAddress(addr2) == 1) {
write("地址匹配!");
}
}
// 示例2:带前缀匹配(前24位网络地址)
on start {
IP_Address 192.168.1.1 addr1;
IP_Address 192.168.1.2 addr2;
if (addr1.MatchesAddress(addr2, 24) == 1) { // 192.168.1.0/24网段匹配
write("地址匹配!");
}
}
// 示例3:直接比较(需完全相等)
on start {
IP_Address 192.168.1.1 addr1;
IP_Address 192.168.1.2 addr2;
if (addr1 == addr2) {
write("地址完全相等!");
} else {
write("地址不相等!");
}
}
IP_Address::ParseAddressFromString
方法
语法
cpp
long IP_Address::ParseAddressFromString(char ipAddr[]);
功能
将字符串转换为IPv4或IPv6地址,并赋值给IP_Address对象。
参数
ipAddr:表示IPv4/IPv6地址的字符串(如"192.168.1.1"或"2001:DB8::1")。
返回值
0:成功1:解析错误
可用性
- 版本:12.0及以上
- 适用场景:以太网测量/仿真测试
示例
cpp
on start {
IP_Address addr;
if (addr.ParseAddressFromString("192.168.1.1") == 0) {
// 成功解析,可使用addr
}
}
IP_Address::PrintAddressToString
方法
语法
cpp
long IP_Address::PrintAddressToString(char ipAddr[]);
功能
将IP地址转换为字符串。IPv6地址采用压缩格式(最长零序列替换为::);若IPv6包含非零作用域ID,则格式为<ipv6地址>%<作用域ID>(如2001:DB8::1%1)。
参数
ipAddr:存储转换后字符串的缓冲区。
返回值
0:成功1:缓冲区过小2:IP对象未设置有效地址
可用性
- 版本:12.0及以上
- 适用场景:以太网测量/仿真测试
示例
cpp
on start {
IP_Address 192.168.1.1 addr;
char addrStr[20];
if (addr.PrintAddressToString(addrStr) == 0) {
write("地址:%s", addrStr); // 输出:地址:192.168.1.1
}
}
IP_Address::SetAddressAsArray
方法
语法
cpp
long IP_Address::SetAddressAsArray(byte ipAddr[]); // 形式1(字节数组)
long IP_Address::SetAddressAsArray(char ipAddr[]); // 形式2(字符数组)
功能
将字节/字符数组复制为IP地址值(IPv4需4字节,IPv6需16字节)。
返回值
0:成功1:数组长度非4(IPv4)或16(IPv6)
可用性
- 版本:12.0及以上
- 适用场景:以太网测量/仿真测试
示例
cpp
on start {
byte addrData[16] = {0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
IP_Address addr;
if (addr.SetAddressAsArray(addrData) == 0) {
// 成功设置IPv6地址:fc00::1
}
}
IP_Endpoint::IsTCP
方法
语法
cpp
long IP_Endpoint::IsTCP();
功能
检查端点的传输协议是否为TCP。
返回值
1:是TCP协议0:非TCP协议
可用性
- 版本:12.0及以上
- 适用场景:以太网测量/仿真测试
示例
cpp
on start {
IP_Endpoint UDP:192.168.1.1:4000 addr;
if (addr.IsUDP()) {
write("是UDP端点");
} else if (addr.IsTCP()) {
write("是TCP端点");
}
}
IP_Endpoint::IsUDP
方法
语法
cpp
long IP_Endpoint::IsUDP();
功能
检查端点的传输协议是否为UDP。
返回值
1:是UDP协议0:非UDP协议
可用性
- 版本:12.0及以上
- 适用场景:以太网测量/仿真测试
示例
同IP_Endpoint::IsTCP示例。
IP_Endpoint::MatchesEndpoint
方法
语法
cpp
long IP_Endpoint::MatchesEndpoint(IP_Endpoint ipEndpoint); // 形式1
long IP_Endpoint::MatchesEndpoint(IP_Endpoint ipEndpoint, long prefix); // 形式2
功能
比较两个端点(IP+端口+协议),通配符始终匹配。若未设置协议或端口为0,则视为通配符。IP地址部分需通过MatchesAddress匹配;形式2仅考虑网络部分(由前缀指定)。
参数
ipEndpoint:可能包含通配符的IP_Endpoint对象。prefix:前缀长度(比特数),仅考虑指定的前几位。
返回值
0:不匹配1:匹配
可用性
- 版本:12.0及以上
- 适用场景:以太网测量/仿真测试
示例
cpp
// 示例1:基础端点匹配(IP+端口需完全一致,协议默认匹配)
on start {
IP_Endpoint 192.168.1.1:4000 ep1;
IP_Endpoint 192.168.1.2:4000 ep2;
if (ep1.MatchesEndpoint(ep2) == 1) {
write("端点匹配!");
}
}
// 示例2:带前缀匹配(IP前24位网络地址+端口匹配)
on start {
IP_Endpoint 192.168.1.1:4000 ep1;
IP_Endpoint 192.168.1.2:4000 ep2;
if (ep1.MatchesEndpoint(ep2, 24) == 1) { // 192.168.1.0/24网段+端口4000匹配
write("端点匹配!");
}
}
IP_Endpoint::ParseEndpointFromString
方法
语法
long IP_Endpoint::ParseEndpointFromString(char endpoint[]);
功能
将字符串转换为端点,并将该端点设置为IP端点值。
参数
endpoint:表示IP端点的字符串。
返回值
0:成功1:解析错误
可用性
- 版本要求:12.0及以上
- 适用范围:以太网
- 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️
示例
capl
variables
{
ip_Endpoint ipEndpoint;
}
on sysvar_update sysvar::Endpoint
{
char endpointText[60];
sysGetVariableString(this, endpointText, elcount(endpointText));
ipEndpoint.ParseEndpointFromString(endpointText);
}
IP_Endpoint::PrintEndpointToString
方法
语法
long IP_Endpoint::PrintEndpointToString(char endpoint[]);
功能
将端点转换为以下格式的字符串:
<TCP/UDP>:<ip_Address>:<Port>
示例
- IPv4端点:
192.168.1.1:100 - IPv4 TCP端点:
TCP:192.168.1.1:100 - IPv6端点:
[2001:DB8::1]:100 - 带作用域ID的IPv6 TCP端点:
TCP:[2001:DB8::1%1]:100 - IPv6 UDP端点:
UDP:[2001:DB8::1]:100
参数
endpoint:存储端点字符串的字符数组。
返回值
0:成功1:字符串缓冲区过小
可用性
- 版本要求:12.0及以上
- 适用范围:以太网
- 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️
示例
capl
void OnReceiveFrom(UdpSocket socket, long result, IP_Endpoint senderEndpoint, byte buffer[], dword size)
{
char endpointText[60];
senderEndpoint.PrintEndpointToString(endpointText);
write("packet from %s received", endpointText);
}
IP_Endpoint::SetToTCP
方法
语法
long IP_Endpoint::SetToTCP();
功能
将传输协议设置为TCP。
参数
无
返回值
0:成功
可用性
- 版本要求:12.0及以上
- 适用范围:以太网
- 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️
示例
capl
on start
{
IP_Endpoint 192.168.1.1:4000 addr;
addr.SetToTCP();
if (addr.IsTCP())
{
write("Is TCP endpoint");
}
}
IP_Endpoint::SetToUDP
方法
语法
long IP_Endpoint::SetToUDP();
功能
将传输协议设置为UDP。
参数
无
返回值
0:成功
可用性
- 版本要求:12.0及以上
- 适用范围:以太网
- 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️
示例
capl
on start
{
IP_Endpoint 192.168.1.1:4000 addr;
addr.Set**返回值**
- `0`:成功
**可用性**
- 版本要求:12.0及以上
- 适用范围:以太网
- 支持场景:测量设置 ✔️ / 仿真/测试设置 ✔️
**示例**
```capl
on start
{
IP_Endpoint UDP:192.168.1.1:4000 addr;
addr.SetTransportProtocolToUnknown();
if (addr.IsTCP())
{
write("Is TCP endpoint");
}
else if (addr.IsUDP())
{
write("Is UDP endpoint");
}
else
{
write("No transport protocol specified for endpoint");
}
}
IP_Endpoint::SetTransportProtocolToUnknown
CAPL 函数 >> 以太网 >> 函数概述 >> IP_Endpoint::SetTransportProtocolToUnknown
方法
语法
long IP_Endpoint::SetTransportProtocolToUnknown();
功能
使传输协议失效。
参数
无
返回值
0:成功
可用性
- 起始版本:12.0
- 适用范围:以太网
- 支持场景 :
- 测量设置:•
- 仿真/测试设置:•
示例
capl
on start
{
IP_Endpoint UDP:192.168.1.1:4000 addr; // 定义UDP端点
addr.SetTransportProtocolToUnknown(); // 使传输协议失效
if (addr.IsTCP())
{
write("Is TCP endpoint"); // 若为TCP端点
}
else if (addr.IsUDP())
{
write("Is UDP endpoint"); // 若为UDP端点
}
else
{
write("No transport protocol specified for endpoint"); // 未指定传输协议
}
}