当前位置:   article > 正文

CAPL如何在底层模拟TCP Client端断开TCP连接

CAPL如何在底层模拟TCP Client端断开TCP连接

TCP断开连接的四次挥手过程中,Client端需要做的事情是:发起断开连接请求,接收Server端断开连接请求并响应。

如果Client端不使用TCP/IP协议栈和Socket接口函数完成连接,而是通过组装以太网报文完成连接,需要注意:

  • Client不使用TCP/IP协议栈,所以不应该配置TCP/IP协议栈。否则收到Server端的ACK+FIN后协议栈会回复RST。
  • Server端在收到Client的FIN报文后,首先回复ACK确认。Client收到此ACK时需要识别,不做任何反应。

此次的CAPL代码设计思路参考文章《on ethernetPacket事件函数接收报文时标准的处理流程》中的思想,遵循网络分层处理原则。具体细节请查看代码注释。

完整代码:

variables
{
  ethernetPacket            ppkt;
}

on ethernetPacket *
{
  //只解析ECU发送的,不解析CANoe Switch Segment转发的
  if (this.dir != 0)
    return;
  
  //链路层解析
  if (this.destination == ethGetMacAddressAsNumber("02:00:00:00:00:52") ||
      this.destination == ethGetMacAddressAsNumber("FF:FF:FF:FF:FF:FF"))
  {
    if (this.type == 0x0800)//ipv4
    {
      Ipv4ProtocolProcess(this);
    }
    
    if (this.type == 0x0806)
    {
      ArpProtocolProcess(th
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号