CANOE CAPL 实现以太网报文接收
概述
这一篇主要讲解如何实现端口接收报文, 发送报文。前提压迫插网线配置节点的ip10.188.1.201
一、
variables
{
UdpSocket gSocket1;//30490端口
UdpSocket gSocket2;//55001 端口
UdpSocket gSocket3;//30001端口
}
宗旨:一个工程里可以创建多个Socket,然后用端口绑定
on start
{
gSocket1= UdpSocket::Open( IP_Endpoint(0.0.0.0:30490) );
gSocket2 = UdpSocket::Open( IP_Endpoint(0.0.0.0:55000) );
gSocket3 = UdpSocket::Open("10.188.1.201", 8080);
#发送信息
gSocket2.Sendto(IP_Endpoint(10.188.1.50:8080), "str_signal_value".elcount("str_signal_value"));
if (IpGetLastError() != 0)
{
write( “<%BASE_FILE_NAME%> UdpSocket::Open failed with result %d”, IpGetLastError() );
}
gSocket2.ReceiveFrom( gRxBuffer, elcount(gRxBuffer) ); //对端口55000
接收的数据做处理,为后面接收函数做准备
}
on preStop
{
// Close socket on measurement stop
gSocket.Close();
}
void OnUdpReceiveFrom( dword socket, long result, ip_Endpoint remoteEndpoint, byte buffer[], dword size)//最为关键的接收函数,此为回调函数
{
if (result == 0)
{
char endpointString[30];
remoteEndpoint.PrintEndpointToString( endpointString );
1
}
if(buffer[0]==0x2&buffer[1]==0x1&buffer[2]==0x80&buffer[3]==0x1)//对接收的数据做判断,
{
sysSetVariableInt( sysvar::huts::a,buffer[32] );//对接收的数据做处理
sysSetVariableInt( sysvar::huts::b,buffer[33] );//对接收的数据做处理
1
2
}
gSocket2.ReceiveFrom( gRxBuffer, elcount(gRxBuffer) );
}