Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)

这篇具有很好参考价值的文章主要介绍了Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前期准备

本文主要讲解CAPL语言里是如何实现TCP连接通信的,所以在本文开始前需要一些前期准备。

1、首先是需要了解TCP的报文格式,连接三次握手,断开连接四次挥手的相关知识,推荐以下两位博主文章。

深入浅出TCP三次握手 (多图详解)

两张动图-彻底明白TCP的三次握手与四次挥手

2、Canoe自带实现TCP连接的CAPL例程,以及在帮助文档里有对TCP接口进行相关的说明,本文以例程为例,对逻辑进行梳理,进行相关更改。

例程路径:C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 16.0.145\Ethernet\Simulation\TCPBasicCAPL
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
说明文档路径:Ethernet>TCP/IP API
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)

3、在说明文档里可以看到创建客户端和服务端套接字流程以及TCP API函数的使用说明。

先了解下简要流程,具体函数使用往后继续讲解。

在客户端,需先使用TcpOpen创建一个Socket(套接字)绑定地址和端口,TcpOpen函数创建完端口后,会返回一个句柄,这个句柄可供后续相关TCP的API函数使用。然后使用TcpConnect函数便可将创建的客户端Socket向目的地址和目的端口(服务端Socket)发起连接。

在服务端,也是使用TcpOpen创建一个Socket。而服务端还需使用TcpListen监听函数,来等待连接,如果收到连接请求,会回调OnTcpListen函数,在OnTcpListen函数里需要使用TcpAccept函数对连接请求进行接受,TcpAccept函数在接受请求后会重建一个新的Socket用于连接通讯。也就是服务端会有两个端口,一个是服务器端口,用于接收连接请求,一个是连接端口,用于连接建立好后进行与客户端的通讯

而端口的关闭均使用TcpClose函数。

二、TCP连接流程实现

1、打开工程

我们打开示例工程看看是如何进行TCP连接模拟的。

首先看到Setup桌面面板,有两个节点分别是Server和Client。Start Value里是对一些变量的值初始化。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)

接着看到Simulation桌面面板,里面有Server和Client两个操作面板。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)

2、运行演示

先看下Start Value面板里的赋值顺序,Listen赋值为0,Connect赋值为0,TxText初始化会“Hello World”,RxText初始化清空。点击闪电Start图标运行,可以看到Listen键置灰,Connect键置灰,TxText文本框里有“Hello World”字符串,点击Send发送,原本清空的RxText框收到了“Hello World”字符串。并且在trace窗口,可以看到tcp三次握手连接的报文以及传输“Hello World”字符串发送和应答报文。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)

3、代码对应

根据运行演示的步骤,来具体看看CAPL代码里的实现。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
首先看看按下服务端按下Listen按键触发的操作。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
TCP栈的位置,以及客户端和服务端ip地址的设置。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
服务端开启监听后,客户端Connect按键按下发起主动连接。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
客户端用了Connect函数后便会发送连接请求,收到服务端的第一帧应答后,也就是第二次握手后,接着会触发OnTcpConnect函数。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
第三次握手后,会触发OnTcpListen监听函数,创建一个新的连接socket进行通信。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
连接完成后,服务端点击send按钮进行发送,触发相关事件,并用连接socket进行消息的发送。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
在服务端发送信息后,则会触发客户端接收回调函数的使用,进行消息的接收。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
最后再看看关闭函数,就是直接调用close函数,服务端close会触发客户端回调OnTcpClose,客户端close会触发服务端回调OnTcpClose。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)

4、客户端向服务端发送消息

源码里已经有服务端向客户端发送消息的代码了,那客户端怎么向服务端发送消息,直接用客户端socket调用send函数就可以了,因为连接已经建立好,所以不用指定服务端的连接socket。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
服务端在OnTcpReceive函数里对接收数据进行处理。
Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)
补充:

CAPL提供两种API的使用方式,如下图,一种是函数形式,一种是方法形式。上面例子均使用的是方法形式,即定义了一个TcpSocket的数据类型gSocket,直接用gSocket这个数据对象去调用send函数或其他函数。

如要使用函数形式,则需要先用TcpOpen函数先创建一个socket,TcpOpen会返回一个dword数据类型的句柄,在使用其他函数时侯,如下方TcpSend时,将句柄传入dword socket这个参数即可,其他函数类似。在程序编写时,使用其中一种形式进行编写较为便利。

Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)

三、总结

以上,capl里实现tcp连接通讯流程是,client和server用open()打开创建socket,服务端用listen()监听,客户端用connect()去主动连接,服务端在listen()回调里用accept()接收连接请求,并创建一个新socket,完成连接,最后用send()即可互相通讯。而close()用于关闭连接。用好open()、listen()、connect()、accept()、close()、send()函数则tcp的三次握手、四次挥手程序自动会去实现。文章来源地址https://www.toymoban.com/news/detail-469167.html

到了这里,关于Canoe CAPL语言实现TCP连接与通信流程(TCP相关API函数详细使用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CANOE UDS 安全访问CAPL脚本

    本文是关于如何用CAPL脚本实现安全访问过程的。其中包括准备工作、CAPL脚本编写和调用诊断接口执行安全访问算法的步骤。以下是该文本的主要要点: 加载包含安全访问算法的dll文件 通过diagSetTarget函数设置目标ECU 使用diagSendRequest函数发送请求获取seed和发送带有key数组的请

    2024年02月06日
    浏览(45)
  • 【CANoe】CAPL_UDS安全算法dll制作

    使用UDS进行刷写时,需要27服务解密后,才能正确执行刷写,本文提供两种制作27解密dll的方法,用于CANoe的CAPL脚本中。 【特别说明】 遇到问题时,CAPL帮助文档提供了很好的指引,大家可以好好利用。 CAPL DLL示例所在路径: C:UsersPublicDocumentsVectorCANoeSample Configurations 12.

    2024年02月06日
    浏览(52)
  • 保护你的CANoe项目:CAPL文件加密与安全实践

    ✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🔗 专栏地址:Vector-CAPL 自动化探索

    2024年02月12日
    浏览(52)
  • Go语言实现TCP通信

    TCP协议为 传输控制协议 ,TCP协议有以下几个特点: 1. TCP是面向连接的传输层协议; 2. 每条TCP连接只能有两个端点,每条TCP连接是点到点的通信; 3. TCP提供可靠的交付服务,保证传送的数据无差错,不丢失,不重要且有序; 4. TCP提供全双工通信,允许双方在任何时候都能发送

    2023年04月22日
    浏览(33)
  • linux【网络编程】TCP协议通信模拟实现、日志函数模拟、守护进程化、TCP协议通信流程、三次握手与四次挥手

    Tcp通信模拟实现与Udp通信模拟实现的区别不大,一个是面向字节流,一个是面向数据报;udp协议下拿到的数据可以直接发送,tcp协议下需要创建链接,用文件描述符完成数据的读写 1.1.1 接口认识 1.1.1.1 listen:监听socket 1.1.1.2 accept:获取连接 通信就用accept返回的文件描述符,

    2024年02月06日
    浏览(51)
  • Java TCP长连接详解:实现稳定、高效的网络通信

    在现代互联网应用中,稳定而高效的网络通信是至关重要的。而TCP长连接作为一种常见的通信机制,允许客户端和服务器之间保持长时间的连接,有效地传输数据。本文将详细介绍Java中TCP长连接的概念、优点、适用场景,并结合实际案例进行分析。 TCP长连接是一种建立在T

    2024年02月03日
    浏览(58)
  • 【TCP服务器的演变过程】编写第一个TCP服务器:实现一对一的连接通信

    手把手教你从0开始编写TCP服务器程序,体验 开局一块砖,大厦全靠垒 。 为了避免篇幅过长使读者感到乏味,对【TCP服务器的开发】进行分阶段实现,一步步进行优化升级。 函数原型: 这个函数建立一个协议族、协议类型、协议编号的socket文件描述符。如果函数调用成功,

    2024年02月03日
    浏览(52)
  • Linux系统c语言socket实现TCP通信

    socket通信用到的函数 sockaddr_in结构体(在netinet/in.h中定义) 对于服务端 使用socket()创建套接字socket 使用bind()将创建的套接字绑定到一个本地地址和端口上 listen()将套接字设为监听模式,准备接收客户端请求 accept()接收连接请求,返回一个对应于此次连接的新的套接字 read()

    2024年02月05日
    浏览(44)
  • Python入门【TCP建立连接的三次握手、 TCP断开连接的四次挥手、套接字编程实战、 TCP编程的实现、TCP双向持续通信】(二十七)

    👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的

    2024年02月12日
    浏览(40)
  • TCP/IP C 语言实现单个客户端和服务端 TCP 通信

     这是多线程服务端 这是单线程服务端  这是客户端  

    2024年02月21日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包