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. CAPL如何底层模拟TCP Client断开TCP连接

    2024-06-17 00:12:02       24 阅读
  2. CAPL如何底层模拟TCP Server建立TCP连接

    2024-06-17 00:12:02       36 阅读
  3. CAPL如何底层模拟TCP Client建立TCP连接

    2024-06-17 00:12:02       26 阅读
  4. CAPL如何使用socket套接字实现TCP通信(断开连接

    2024-06-17 00:12:02       44 阅读
  5. CAPL如何使用socket套接字实现TCP通信(建立连接

    2024-06-17 00:12:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-17 00:12:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-17 00:12:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-17 00:12:02       82 阅读
  4. Python语言-面向对象

    2024-06-17 00:12:02       91 阅读

热门阅读

  1. 杀戮尖塔游戏

    2024-06-17 00:12:02       29 阅读
  2. Elasticsearch聚合分析:数据汇总与可视化的奥秘

    2024-06-17 00:12:02       31 阅读
  3. Spring Boot顶层接口实现类注入项目的方法

    2024-06-17 00:12:02       33 阅读
  4. 检查固态硬盘的文件系统是否有问题的方法

    2024-06-17 00:12:02       107 阅读
  5. 关于指针的一次错误调用

    2024-06-17 00:12:02       34 阅读
  6. SqlSugar 集成

    2024-06-17 00:12:02       27 阅读