简介
??这里说的TCP协议调试定义是在开发长连接TCP协议应用时,为了验证代码流程或查找bug,需要与对端交互数据过来,当需要时可以暂停发送;单条发送;跳过发送;正常发送;发送时修改数据等。
??TcpEngine提供的解决方案是:我们前端应用和后端应用网络通信时,先经过TcpEngine转发,在转发过程中,可以对网络数据暂停转发(暂停);单条转发(单步);正常转发(运行);转发前编辑数据或转发手工制造的数据(手工发送)等操作,解决我们在开发TCP协议应用时碰到的下列几种情况。
??一、前端小组和后端小组协商后协议格式后,就分别开发新功能,在开发过程中需要对端小组发送网络数据过来触发代码执行,以验证代码流程是否正确。但是对端小组也正在开发,功能不完善也不能给你发数据,此时只能盲写代码。另一种情况是我们已经写完代码,需要对端小组发送数据过来,触发代码以验证流程是否正确,但对端功能不完善也不能给你发数据,只能干等待?此时可以使用TcpEngine模拟对端发送数据给自己,触发代码执行。
??二、新功能已经集成提交到测试阶段,在测试过程中发生bug,此时需要对端发送数据过来定位错误,但由于对端也在解决bug没时间或不能重现错误数据,此时无法通过网络数据触代码流程来查找bug。此时也可以使用TcpEngine摸拟对端给数据给自己。
??三、应用已经交付给客户端,客户使用过程中发生网络数据错误,需要保存现场数据,解析以重现错误现场。此时我们可以使用TcpEngine开启代理服务器,让前端应用和后端应用的数据通信经过TcpEngine转发,TcpEngine转发数据同时解析和保存现场数据,再次使用TcpEngine打开解析,以重现网络的网络数据。
??新版本放弃了WFP内核获取网络数据方式,改用代理服务器获取网络,带来易用性很大的提升,新增了TCP协议调试运行模式,新增的功能有:暂停;单步;跳过;运行等新功能。
初识TcpEngine
TcpEngine架构图
??TcpEngine使用代理服务器方式截取网络数据,前端需要通过代理客户端把数据发送给TcpEngine的代理服务器模块,TcpEngine收到数据进行解析并显示,然后把解析后的数据再次封装转发给后端,数据流程图如下图所示。
??下面我们以一个最简单的应用来演示TcpEngine怎么使用,这个应用非常简单,前端发送一条数据给后端,后端就响应一条数据给前端。前端和后端都是用java1.8开发,后端已经部署到demo.tcpengine.cn 服务器,运行前端需要已配置java环境,代码已放到https://gitee.com/www.csdn.net/tcp-engine-test。
把前端应用加入到代理客户端
??一、我们以ProxyCap来做为代理客户端,安装ProxyCap成功后会通知区域显示ProxyCap图标,如下图所示。
??二、右键ProxyCap图标弹出配置菜单,点击Configuration按钮,如下图所示。
??三、点击右边导航树的Proxies,再点击New Proxy Server小图标,新建一条指向代理服务器的配置信息,如下图所示。
??四、点击导航树的Rules,再点击Quick Add Rule小图标,把我们的前端应用exe文件加入到ProxyCap,如下图所示。
查找前端应用exe文件的小技巧
??一、打开任务管理器。
??二、再启动我们的前端应用,这时前端应用就新增到任务管理器应用列表,如下图所示。
??三、鼠标右键我们的应用,点击“打开文件所在的位置(O)”,就可定位到我们应用exe文件的位置,如下图所示。
??如下图所示,到此我们成功的把前端应用加入到了ProxyCap代理客户端,当我们再启动前端应用时,前端应用的所有TCP网络数据都由ProxyCap转发给代理服务器,再由代理服务器转发数据给后端应用。
启动TcpEngine代理服务器
??启动TcpEngine,初始的主界面如下图所示。
??代理服务器启动成功如下图所示,点击“退出”仅隐藏窗口,对代理服务器运行状态没有影响,只有TcpEngine退出后,代理服务器才停止运行。
??如果我们启动失败,弹出下图所示异常对话框,那么是因为系统没有安装Visual C++ 14 Runtime Libraries (C++运行支持库),到微软件官网或这里https://tcp-engine.oss-cn-shenzhen.aliyuncs.com/vc_redist.x64.exe下载并安装就可以解决。
配置截取网络数据
??如下图所示,点击主窗口的新建按钮。
??新建一个空的解析窗口,如下图所示。
??点击“开始”,弹出网络配置对话框,填入后端应用的网络地址和端口,点击“接收不解析”按钮,把网络配置加入代理服务器的数据截取列表,如下图所示。
??解析主界面开始监听网络数据如下图所示。
截取网络数据
??启动TcpEngineClient,下载地址:http://www.tcpengine.cn/tcp_engine/down_list.html,下载TcpEngine1.3.0.zip到本地,如下图所示。
??解压后在TcpEngine1.3.0\demo\TcpEngineClient目标下有两个文件startupClient.bat;TcpEngineClient.jar,双击startupClient.bat(注意,运行前本机必须配置好java运行环境,本示例是在java1.8下开发的),示例主界面如下图所示。
??一、点击“连接”;二、点击“发送1000”,发送一条TCP协议到后端并从后端接收一条TCP,如下图所示。
??再查看TcpEngine界面,显示TcpEngine已截取到TcpEngine协议数据,如下图所示。
解析网络数据?
??本示例演示TCP协议格式如下图所示,消息体长度就第二个int型消息体长度决定。
??对应的解析规则如下所示。
int32 id;
int32 len;
if(0 < len)
{
byte[len] body; // 消息体
}
??来自前端id=1000消息的消息体如下图所示。
??
??对应的消息体的解析规则如下所示。
if(1000 == id) {
int32 loginId = split(body);
string[len - 4] = split(body);
}
??完整的解析规则如下所示。
set endian = big;
set encoding = utf-8;
int32 id;
int32 len;
if(0 < len)
{
byte[len] body; // 消息体
if(1000 == id)
{
int32 loginId = split(body);
string[len - 4] = split(body);
}
}
??一、点击“停止”;二、输入解析规则到前端解析规则窗口;三、点击刷新,四