发明内容
为了克服现有技术的缺陷,本发明提供一种TCP-串口通信透传的方法及装置,能够在TCP客户端和串口设备之间实现网络数据和串口数据的双向透传。
为了解决上述技术问题,第一方面,本发明一实施例提供一种TCP-串口通信透传的方法,包括:
根据TCP客户端的通信套接字和串口设备的通信句柄,建立所述TCP客户端和所述串口设备的通信通道,得到TCP-串口通信通道;
基于所述TCP-串口通信通道,将所述串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,使所述TCP客户端逐帧发送所有所述串口数据;
根据TCP服务端的通信套接字和所述TCP客户端的通信句柄,建立所述TCP服务端和所述TCP客户端的通信通道,得到TCP-TCP通信通道;
基于所述TCP-TCP通信通道,将所述TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列;
基于所述TCP-串口通信通道,将所述TCP客户端接收缓存队列中的所有所述网络数据发送至所述串口设备,使所述串口设备逐帧发送所有所述网络数据。
进一步地,所述基于所述TCP-串口通信通道,将所述串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,具体包括:
基于所述TCP-串口通信通道,定期监测所述串口设备的串口数据接收情况,以及分别检测所述TCP客户端的通信套接字和所述串口设备的通信句柄的状态;
在所述串口设备在当前周期内接收到至少一个所述串口数据,且所述TCP客户端的通信套接字和所述串口设备的通信句柄均处于正常状态时,将所述串口设备在当前周期内接收的所有所述串口数据保存至所述TCP客户端发送缓存队列。
进一步地,所述将所述串口设备在当前周期内接收的所有所述串口数据保存至所述TCP客户端发送缓存队列,具体包括:
遍历所述串口设备在当前周期内接收的每一所述串口数据,判断当前串口数据的数据长度是否小于等于所述TCP客户端发送缓存队列中可存储数据的总数据长度;
在所述当前串口数据的数据长度小于等于所述TCP客户端发送缓存队列中可存储数据的总数据长度时,将所述当前串口数据作为一帧数据,更新所述TCP客户端发送缓存队列中已存储数据的总数据帧数;
判断所述TCP客户端发送缓存队列中已存储数据的总数据帧数是否小于所述TCP客户端发送缓存队列的最大数据帧数;
在所述TCP客户端发送缓存队列中已存储数据的总数据帧数小于所述TCP客户端发送缓存队列的最大数据帧数时,将所述当前串口数据作为一帧数据保存至所述TCP客户端发送缓存队列,更新所述TCP客户端发送缓存队列中可存储数据的总数据长度。
进一步地,所述使所述TCP客户端逐帧发送所有所述串口数据,具体包括:
通过所述TCP客户端,检测所述TCP客户端的通信套接字的状态;
通过所述TCP客户端,在所述TCP客户端的通信套接字处于正常状态时,将所述TCP客户端发送缓存队列中的每一所述串口数据均作为一帧数据,逐帧发送所有所述串口数据。
进一步地,所述使所述TCP客户端逐帧发送所有所述串口数据,具体包括:
在所述TCP客户端发送任一所述串口数据后,监测所述TCP客户端是否成功发送所述串口数据;
在所述TCP客户端未成功发送所述串口数据时,销毁所述TCP客户端的通信套接字,生成TCP发送失败记录。
进一步地,所述基于所述TCP-TCP通信通道,将所述TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列,具体包括:
基于所述TCP-TCP通信通道,定期监测所述TCP客户端的网络数据接收情况,以及分别检测所述TCP服务端的通信套接字和所述TCP客户端的通信句柄的状态;
在所述TCP客户端在当前周期内接收到至少一个所述网络数据,且所述TCP服务端的通信套接字和所述TCP客户端的通信句柄均处于正常状态时,将所述TCP客户端在当前周期内接收的所有所述网络数据保存至所述TCP客户端接收缓存队列。
进一步地,所述将所述TCP客户端在当前周期内接收的所有所述网络数据保存至所述TCP客户端接收缓存队列,具体包括:
遍历所述TCP客户端在当前周期内接收的每一所述网络数据,判断当前网络数据的数据长度是否小于等于所述TCP客户端接收缓存队列中可存储数据的总数据长度;
在所述当前网络数据的数据长度小于等于所述TCP客户端接收缓存队列中可存储数据的总数据长度时,将所述当前网络数据作为一帧数据,更新所述TCP客户端接收缓存队列中已存储数据的总数据帧数;
判断所述TCP客户端接收缓存队列中已存储数据的总数据帧数是否小于所述TCP客户端接收缓存队列的最大数据帧数;
在所述TCP客户端接收缓存队列中已存储数据的总数据帧数小于所述TCP客户端接收缓存队列的最大数据帧数时,将所述当前网络数据作为一帧数据保存至所述TCP客户端接收缓存队列,更新所述TCP客户端接收缓存队列中可存储数据的总数据长度。
进一步地,所述使所述串口设备逐帧发送所有所述网络数据,具体包括:
通过所述串口设备,检测所述串口设备的通信句柄的状态;
通过所述串口设备,在所述串口设备的通信句柄处于正常状态时,将所述TCP客户端接收缓存队列中的每一所述网络数据均作为一帧数据,逐帧发送所有所述网络数据。
进一步地,所述使所述串口设备逐帧发送所有所述网络数据,具体包括:
在所述串口设备发送任一所述网络数据后,监测所述串口设备是否成功发送所述网络数据;
在所述串口设备未成功发送所述网络数据时,销毁所述串口设备的通信句柄,生成串口发送失败记录。
第二方面,本发明一实施例提供一种TCP-串口通信透传的装置,包括:
TCP-串口通信通道建立模块,用于根据TCP客户端的通信套接字和串口设备的通信句柄,建立所述TCP客户端和所述串口设备的通信通道,得到TCP-串口通信通道;
串口数据传输模块,用于基于所述TCP-串口通信通道,将所述串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,使所述TCP客户端逐帧发送所有所述串口数据;
TCP-TCP通信通道建立模块,用于根据TCP服务端的通信套接字和所述TCP客户端的通信句柄,建立所述TCP服务端和所述TCP客户端的通信通道,得到TCP-TCP通信通道;
网络数据接收模块,用于基于所述TCP-TCP通信通道,将所述TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列;
网络数据传输模块,用于基于所述TCP-串口通信通道,将所述TCP客户端接收缓存队列中的所有所述网络数据发送至所述串口设备,使所述串口设备逐帧发送所有所述网络数据。
相比于现有技术,本发明的实施例,具有如下有益效果:
通过根据TCP客户端的通信套接字和串口设备的通信句柄,建立TCP客户端和串口设备的通信通道,得到TCP-串口通信通道;基于TCP-串口通信通道,将串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,使TCP客户端逐帧发送所有串口数据;根据TCP服务端的通信套接字和TCP客户端的通信句柄,建立TCP服务端和TCP客户端的通信通道,得到TCP-TCP通信通道;基于TCP-TCP通信通道,将TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列;基于TCP-串口通信通道,将TCP客户端接收缓存队列中的所有网络数据发送至串口设备,使串口设备逐帧发送所有网络数据,能够在TCP客户端和串口设备之间实现网络数据和串口数据的双向透传。
具体实施方式
下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,文中的步骤编号,仅为了方便具体实施例的解释,不作为限定步骤执行先后顺序的作用。本实施例提供的方法可以由相关的终端设备执行,且下文均以TCP客户端的处理器作为执行主体为例进行说明。
如图1所示,第一实施例提供一种TCP-串口通信透传的方法,包括步骤S1~S5:
S1、根据TCP客户端的通信套接字和串口设备的通信句柄,建立TCP客户端和串口设备的通信通道,得到TCP-串口通信通道;
S2、基于TCP-串口通信通道,将串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,使TCP客户端逐帧发送所有串口数据;
S3、根据TCP服务端的通信套接字和TCP客户端的通信句柄,建立TCP服务端和TCP客户端的通信通道,得到TCP-TCP通信通道;
S4、基于TCP-TCP通信通道,将TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列;
S5、基于TCP-串口通信通道,将TCP客户端接收缓存队列中的所有网络数据发送至串口设备,使串口设备逐帧发送所有网络数据。
可以理解的是,TCP客户端和串口设备分别与TCP服务端连接。
作为示例性地,在步骤S1中,创建TCP客户端的通信套接字,例如运行如图2所示的TCP客户端通信套接字创建线程,创建TCP客户端的通信套接字,以及创建串口设备的通信句柄,例如运行如图3所示的串口设备通信句柄创建和串口数据接收线程,创建串口设备的通信句柄,根据TCP客户端的通信套接字和串口设备的通信句柄,建立TCP客户端和串口设备的通信通道,得到TCP-串口通信通道。
在步骤S2中,当监测到串口设备接收到串口数据时,基于TCP-串口通信通道,将串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,使TCP客户端从TCP客户端发送缓存队列中逐帧读取所有串口数据进行TCP发送,从而逐帧发送所有串口数据。
在步骤S3中,创建TCP服务端的通信套接字,例如运行如图4所示的TCP服务端通信套接字创建线程,创建TCP服务端的通信套接字,以及创建TCP客户端的通信句柄,根据TCP服务端的通信套接字和TCP客户端的通信句柄,建立TCP服务端和TCP客户端的通信通道,得到TCP-TCP通信通道。
在步骤S4中,当监测到TCP服务端下发网络数据时,基于TCP-TCP通信通道,将TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列。
在步骤S5中,基于TCP-串口通信通道,将TCP客户端接收缓存队列中的所有网络数据发送至串口设备,使串口设备从TCP客户端接收缓存队列中逐帧读取所有网络数据进行串口发送,从而逐帧发送所有网络数据。
本实施例通过建立TCP-串口通信通道,基于TCP-串口通信通道,将串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,使TCP客户端从TCP客户端发送缓存队列中逐帧读取所有串口数据进行TCP发送,以及基于TCP-串口通信通道,将TCP客户端接收缓存队列中的所有网络数据发送至串口设备,使串口设备从TCP客户端接收缓存队列中逐帧读取所有网络数据进行串口发送,能够在TCP客户端和串口设备之间实现网络数据和串口数据的双向透传,且其中对串口数据和网络数据先进行合包处理再进行数据透传,能够确保上位机接收到完整数据,避免出现因数据不完整影响协议解析的问题。
在优选的实施例当中,所述基于TCP-串口通信通道,将串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,具体包括:基于TCP-串口通信通道,定期监测串口设备的串口数据接收情况,以及分别检测TCP客户端的通信套接字和串口设备的通信句柄的状态;在串口设备在当前周期内接收到至少一个串口数据,且TCP客户端的通信套接字和串口设备的通信句柄均处于正常状态时,将串口设备在当前周期内接收的所有串口数据保存至TCP客户端发送缓存队列。
作为示例性地,假设以100毫秒为一个周期,运行如图3所示的串口设备通信句柄创建和串口数据接收线程,基于TCP-串口通信通道,定期监测串口设备的串口数据接收情况,以及分别检测TCP客户端的通信套接字和串口设备的通信句柄的状态,在串口设备在当前周期内接收到至少一个串口数据,且TCP客户端的通信套接字和串口设备的通信句柄均处于正常状态时,将串口设备在当前周期内接收的所有串口数据保存至TCP客户端发送缓存队列;在串口设备在当前周期内未接收到一个串口数据,或者TCP客户端的通信套接字和串口设备的通信句柄中任一个不处于正常状态时,等待下一周期执行串口数据接收操作。
本实施例通过分别检测TCP客户端的通信套接字和串口设备的通信句柄的状态来对TCP通信和串口通信进行保活处理,能够确保将串口设备在当前周期内接收的所有串口数据完整保存至TCP客户端发送缓存队列。
在优选的实施例当中,所述将串口设备在当前周期内接收的所有串口数据保存至TCP客户端发送缓存队列,具体包括:遍历串口设备在当前周期内接收的每一串口数据,判断当前串口数据的数据长度是否小于等于TCP客户端发送缓存队列中可存储数据的总数据长度;在当前串口数据的数据长度小于等于TCP客户端发送缓存队列中可存储数据的总数据长度时,将当前串口数据作为一帧数据,更新TCP客户端发送缓存队列中已存储数据的总数据帧数;判断TCP客户端发送缓存队列中已存储数据的总数据帧数是否小于TCP客户端发送缓存队列的最大数据帧数;在TCP客户端发送缓存队列中已存储数据的总数据帧数小于TCP客户端发送缓存队列的最大数据帧数时,将当前串口数据作为一帧数据保存至TCP客户端发送缓存队列,更新TCP客户端发送缓存队列中可存储数据的总数据长度。
作为示例性地,在获取到串口设备在当前周期内接收的所有串口数据时,运行如图5所示的串口数据保存线程,遍历串口设备在当前周期内接收的每一串口数据,以当前遍历的串口数据作为当前串口数据,判断当前串口数据的数据长度是否小于等于TCP客户端发送缓存队列中可存储数据的总数据长度,在当前串口数据的数据长度不小于等于TCP客户端发送缓存队列中可存储数据的总数据长度时,无法将当前串口数据作为一帧数据保存至TCP客户端发送缓存队列,可等待TCP客户端发送缓存队列释放存储空间,在当前串口数据的数据长度小于等于TCP客户端发送缓存队列中可存储数据的总数据长度时,将当前串口数据作为一帧数据,更新TCP客户端发送缓存队列中已存储数据的总数据帧数,进而判断TCP客户端发送缓存队列中已存储数据的总数据帧数是否小于TCP客户端发送缓存队列的最大数据帧数,在TCP客户端发送缓存队列中已存储数据的总数据帧数小于TCP客户端发送缓存队列的最大数据帧数时,将当前串口数据作为一帧数据保存至TCP客户端发送缓存队列,更新TCP客户端发送缓存队列中可存储数据的总数据长度,在TCP客户端发送缓存队列中已存储数据的总数据帧数不小于TCP客户端发送缓存队列的最大数据帧数时,将TCP客户端发送缓存队列中已存储数据的总数据帧数重置为0,将当前串口数据作为一帧数据保存至TCP客户端发送缓存队列。
本实施例考虑到TCP客户端发送缓存队列中可存储数据的总数据长度,将串口设备在当前周期内接收的所有串口数据逐帧保存至TCP客户端发送缓存队列,能够确保将串口设备在当前周期内接收的所有串口数据完整保存至TCP客户端发送缓存队列。
在优选的实施例当中,所述使TCP客户端逐帧发送所有串口数据,具体包括:通过TCP客户端,检测TCP客户端的通信套接字的状态;通过TCP客户端,在TCP客户端的通信套接字处于正常状态时,将TCP客户端发送缓存队列中的每一串口数据均作为一帧数据,逐帧发送所有串口数据。
作为示例性地,运行如图6所示的TCP发送线程,通过TCP客户端,检测TCP客户端的通信套接字的状态,在TCP客户端的通信套接字处于正常状态时,将TCP客户端发送缓存队列中的每一串口数据均作为一帧数据,从TCP客户端发送缓存队列中逐帧读取所有串口数据进行TCP发送,从而逐帧发送所有串口数据。
本实施例通过检测TCP客户端的通信套接字的状态来对TCP通信进行保活处理,能够确保TCP客户端完整发送串口设备在当前周期内接收的所有串口数据。
在优选的实施例当中,所述使TCP客户端逐帧发送所有串口数据,具体包括:在TCP客户端发送任一串口数据后,监测TCP客户端是否成功发送串口数据;在TCP客户端未成功发送串口数据时,销毁TCP客户端的通信套接字,生成TCP发送失败记录。
作为示例性地,运行如图6所示的TCP发送线程,在TCP客户端发送任一串口数据后,监测TCP客户端是否成功发送串口数据,在TCP客户端成功发送串口数据时,继续从TCP客户端发送缓存队列中读取下一帧串口数据进行TCP发送,在TCP客户端未成功发送串口数据时,销毁TCP客户端的通信套接字,生成TCP发送失败记录,以重新创建TCP客户端的通信套接字,重新发送串口数据。
本实施例通过监测TCP客户端的串口数据发送情况,能够确保TCP客户端完整发送串口设备在当前周期内接收的所有串口数据。
在优选的实施例当中,所述基于TCP-TCP通信通道,将TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列,具体包括:基于TCP-TCP通信通道,定期监测TCP客户端的网络数据接收情况,以及分别检测TCP服务端的通信套接字和TCP客户端的通信句柄的状态;在TCP客户端在当前周期内接收到至少一个网络数据,且TCP服务端的通信套接字和TCP客户端的通信句柄均处于正常状态时,将TCP客户端在当前周期内接收的所有网络数据保存至TCP客户端接收缓存队列。
作为示例性地,假设以100毫秒为一个周期,运行如图7所示的网络数据接收线程,基于TCP-TCP通信通道,定期监测TCP客户端的网络数据接收情况,以及分别检测TCP服务端的通信套接字和TCP客户端的通信句柄的状态,在TCP客户端在当前周期内接收到至少一个网络数据,且TCP服务端的通信套接字和TCP客户端的通信句柄均处于正常状态时,将TCP客户端在当前周期内接收的所有网络数据保存至TCP客户端接收缓存队列;在TCP客户端在当前周期内未接收到一个网络数据,或者TCP服务端的通信套接字和TCP客户端的通信句柄中任一个不处于正常状态时,等待下一周期执行网络数据接收操作。
本实施例通过分别检测TCP服务端的通信套接字和TCP客户端的通信句柄的状态来对TCP通信进行保活处理,能够确保将TCP客户端在当前周期内接收的所有网络数据完整保存至TCP客户端接收缓存队列。
在优选的实施例当中,所述将TCP客户端在当前周期内接收的所有网络数据保存至TCP客户端接收缓存队列,具体包括:遍历TCP客户端在当前周期内接收的每一网络数据,判断当前网络数据的数据长度是否小于等于TCP客户端接收缓存队列中可存储数据的总数据长度;在当前网络数据的数据长度小于等于TCP客户端接收缓存队列中可存储数据的总数据长度时,将当前网络数据作为一帧数据,更新TCP客户端接收缓存队列中已存储数据的总数据帧数;判断TCP客户端接收缓存队列中已存储数据的总数据帧数是否小于TCP客户端接收缓存队列的最大数据帧数;在TCP客户端接收缓存队列中已存储数据的总数据帧数小于TCP客户端接收缓存队列的最大数据帧数时,将当前网络数据作为一帧数据保存至TCP客户端接收缓存队列,更新TCP客户端接收缓存队列中可存储数据的总数据长度。
作为示例性地,在获取到TCP客户端在当前周期内接收的所有网络数据时,运行如图8所示的网络数据保存线程,遍历TCP客户端在当前周期内接收的每一网络数据,以当前遍历的网络数据作为当前网络数据,判断当前网络数据的数据长度是否小于等于TCP客户端接收缓存队列中可存储数据的总数据长度,在当前网络数据的数据长度不小于等于TCP客户端接收缓存队列中可存储数据的总数据长度时,无法将当前网络数据作为一帧数据保存至TCP客户端接收缓存队列,可等待TCP客户端接收缓存队列释放存储空间,在当前网络数据的数据长度小于等于TCP客户端接收缓存队列中可存储数据的总数据长度时,将当前网络数据作为一帧数据,更新TCP客户端接收缓存队列中已存储数据的总数据帧数,进而判断TCP客户端接收缓存队列中已存储数据的总数据帧数是否小于TCP客户端接收缓存队列的最大数据帧数,在TCP客户端接收缓存队列中已存储数据的总数据帧数小于TCP客户端接收缓存队列的最大数据帧数时,将当前网络数据作为一帧数据保存至TCP客户端接收缓存队列,更新TCP客户端接收缓存队列中可存储数据的总数据长度,在TCP客户端接收缓存队列中已存储数据的总数据帧数不小于TCP客户端接收缓存队列的最大数据帧数时,将TCP客户端接收缓存队列中已存储数据的总数据帧数重置为0,将当前网络数据作为一帧数据保存至TCP客户端接收缓存队列。
本实施例考虑到TCP客户端接收缓存队列中可存储数据的总数据长度,将TCP客户端在当前周期内接收的所有网络数据逐帧保存至TCP客户端接收缓存队列,能够确保将TCP客户端在当前周期内接收的所有网络数据完整保存至TCP客户端接收缓存队列。
在优选的实施例当中,所述使串口设备逐帧发送所有网络数据,具体包括:通过串口设备,检测串口设备的通信句柄的状态;通过串口设备,在串口设备的通信句柄处于正常状态时,将TCP客户端接收缓存队列中的每一网络数据均作为一帧数据,逐帧发送所有网络数据。
作为示例性地,运行如图9所示的串口发送线程,通过串口设备,检测串口设备的通信句柄的状态,在串口设备的通信句柄处于正常状态时,将TCP客户端接收缓存队列中的每一网络数据均作为一帧数据,从TCP客户端接收缓存队列中逐帧读取所有网络数据进行串口发送,从而逐帧发送所有网络数据。
本实施例通过检测串口设备的通信句柄的状态来对串口通信进行保活处理,能够确保串口设备完整发送TCP客户端在当前周期内接收的所有网络数据。
在优选的实施例当中,所述使串口设备逐帧发送所有网络数据,具体包括:在串口设备发送任一网络数据后,监测串口设备是否成功发送网络数据;在串口设备未成功发送网络数据时,销毁串口设备的通信句柄,生成串口发送失败记录。
作为示例性地,运行如图9所示的串口发送线程,在串口设备发送任一网络数据后,监测串口设备是否成功发送网络数据,在串口设备成功发送网络数据时,继续从TCP客户端接收缓存队列中读取下一帧网络数据进行串口发送,在串口设备未成功发送网络数据时,销毁串口设备的通信句柄,生成串口发送失败记录,以重新创建串口设备的通信句柄,重新发送网络数据。
本实施例通过监测串口设备的网络数据发送情况,能够确保串口设备完整发送TCP客户端在当前周期内接收的所有网络数据。
基于与第一实施例相同的发明构思,第二实施例提供如图10所示的一种TCP-串口通信透传的装置,包括:TCP-串口通信通道建立模块21,用于根据TCP客户端的通信套接字和串口设备的通信句柄,建立TCP客户端和串口设备的通信通道,得到TCP-串口通信通道;串口数据传输模块22,用于基于TCP-串口通信通道,将串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,使TCP客户端逐帧发送所有串口数据;TCP-TCP通信通道建立模块23,用于根据TCP服务端的通信套接字和TCP客户端的通信句柄,建立TCP服务端和TCP客户端的通信通道,得到TCP-TCP通信通道;网络数据接收模块24,用于基于TCP-TCP通信通道,将TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列;网络数据传输模块25,用于基于TCP-串口通信通道,将TCP客户端接收缓存队列中的所有网络数据发送至串口设备,使串口设备逐帧发送所有网络数据。
在优选的实施例当中,串口数据传输模块22,包括:串口数据保存单元,用于:基于TCP-串口通信通道,定期监测串口设备的串口数据接收情况,以及分别检测TCP客户端的通信套接字和串口设备的通信句柄的状态;在串口设备在当前周期内接收到至少一个串口数据,且TCP客户端的通信套接字和串口设备的通信句柄均处于正常状态时,将串口设备在当前周期内接收的所有串口数据保存至TCP客户端发送缓存队列。
在优选的实施例当中,串口数据保存单元,具体用于:遍历串口设备在当前周期内接收的每一串口数据,判断当前串口数据的数据长度是否小于等于TCP客户端发送缓存队列中可存储数据的总数据长度;在当前串口数据的数据长度小于等于TCP客户端发送缓存队列中可存储数据的总数据长度时,将当前串口数据作为一帧数据,更新TCP客户端发送缓存队列中已存储数据的总数据帧数;判断TCP客户端发送缓存队列中已存储数据的总数据帧数是否小于TCP客户端发送缓存队列的最大数据帧数;在TCP客户端发送缓存队列中已存储数据的总数据帧数小于TCP客户端发送缓存队列的最大数据帧数时,将当前串口数据作为一帧数据保存至TCP客户端发送缓存队列,更新TCP客户端发送缓存队列中可存储数据的总数据长度。
在优选的实施例当中,串口数据传输模块22,包括:串口数据发送单元,用于:通过TCP客户端,检测TCP客户端的通信套接字的状态;通过TCP客户端,在TCP客户端的通信套接字处于正常状态时,将TCP客户端发送缓存队列中的每一串口数据均作为一帧数据,逐帧发送所有串口数据。
在优选的实施例当中,串口数据发送单元,具体用于:在TCP客户端发送任一串口数据后,监测TCP客户端是否成功发送串口数据;在TCP客户端未成功发送串口数据时,销毁TCP客户端的通信套接字,生成TCP发送失败记录。
在优选的实施例当中,网络数据接收模块24,包括:网络数据保存单元,用于:基于TCP-TCP通信通道,定期监测TCP客户端的网络数据接收情况,以及分别检测TCP服务端的通信套接字和TCP客户端的通信句柄的状态;在TCP客户端在当前周期内接收到至少一个网络数据,且TCP服务端的通信套接字和TCP客户端的通信句柄均处于正常状态时,将TCP客户端在当前周期内接收的所有网络数据保存至TCP客户端接收缓存队列。
在优选的实施例当中,网络数据保存单元,具体用于:遍历TCP客户端在当前周期内接收的每一网络数据,判断当前网络数据的数据长度是否小于等于TCP客户端接收缓存队列中可存储数据的总数据长度;在当前网络数据的数据长度小于等于TCP客户端接收缓存队列中可存储数据的总数据长度时,将当前网络数据作为一帧数据,更新TCP客户端接收缓存队列中已存储数据的总数据帧数;判断TCP客户端接收缓存队列中已存储数据的总数据帧数是否小于TCP客户端接收缓存队列的最大数据帧数;在TCP客户端接收缓存队列中已存储数据的总数据帧数小于TCP客户端接收缓存队列的最大数据帧数时,将当前网络数据作为一帧数据保存至TCP客户端接收缓存队列,更新TCP客户端接收缓存队列中可存储数据的总数据长度。
在优选的实施例当中,网络数据接收模块24,包括:网络数据发送单元,用于:通过串口设备,检测串口设备的通信句柄的状态;通过串口设备,在串口设备的通信句柄处于正常状态时,将TCP客户端接收缓存队列中的每一网络数据均作为一帧数据,逐帧发送所有网络数据。
在优选的实施例当中,网络数据发送单元,具体用于:在串口设备发送任一网络数据后,监测串口设备是否成功发送网络数据;在串口设备未成功发送网络数据时,销毁串口设备的通信句柄,生成串口发送失败记录。
综上所述,实施本发明的实施例,具有如下有益效果:
通过根据TCP客户端的通信套接字和串口设备的通信句柄,建立TCP客户端和串口设备的通信通道,得到TCP-串口通信通道;基于TCP-串口通信通道,将串口设备接收的所有串口数据保存至TCP客户端发送缓存队列,使TCP客户端逐帧发送所有串口数据;根据TCP服务端的通信套接字和TCP客户端的通信句柄,建立TCP服务端和TCP客户端的通信通道,得到TCP-TCP通信通道;基于TCP-TCP通信通道,将TCP服务端下发的所有网络数据保存至TCP客户端接收缓存队列;基于TCP-串口通信通道,将TCP客户端接收缓存队列中的所有网络数据发送至串口设备,使串口设备逐帧发送所有网络数据,能够在TCP客户端和串口设备之间实现网络数据和串口数据的双向透传。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
本领域普通技术人员可以理解实现上述实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。