开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

sender通用收发包测试工具

简介:
+关注继续查看

sender工具是通用的发包工具,支持xml文件,在使用sender工具之前需要先把头文件中的结构体转化成xml文件,然后进一步使用sender工具实现发包功能。下面将详细描述此工具的使用:

 

1获取结构体对应的xml文件

Ø xml转换器功能:把文件中的一个struct结构转换成sender工具支持的xml格式保存在xml文件里,且生成的文件名为:结构体名.xml

Ø xml转换器工具使用方法:

./gen_xml.pl 结构体名称 网络序标志 header1.h header2.h ……

Ø 工具使用说明:

·结构体名称需要与头文件中结构体名一致

·网络序标志此结构体是否以网络序形式发送:1,网络序:0,主机序

·后面可以跟多个头文件,支持结构体嵌套替换、typedef替换

·工具将结构体转换为xml格式文件保存在xmldata/结构体名.xml文件中,工具将xml结构中的变量值使用环境变量进行了填充,被填充的环境变量统一保存在xmldata/结构体名.datal文件中。环境变量的格式为:结构体名_结构体字段名

·在实际使用的时候,可以修改xml文件中某个结构体变量对应的环境变量名,并可以通过在shell脚本中重新赋值的方式来设定此环境变量的值

Ø 示例:

·头文件如下:

test.h

struct my_test

{

int cmd;

int ip;

int port;

int reserved;

}

Struct response

{

Int result;

}

·使用xml转换器进行转换:

./gen_xml.pl my_test 1 test.h

·生成的xml文件以及data文件如下:

my_test.xml

==================================================================

<packet type="struct" repeat="1" value="my_test" endian="1">

<cmd type="int" value="$my_test_cmd" repeat="1"/>

<ip type="int" value="$my_test_ip" repeat="1"/>

<port type="int" value="$my_test_port" repeat="1"/>

<reserved type="int" value="$my_test_reserved" repeat="1"/>

</packet>

my_test.data

==================================================================

export my_test_cmd=

export my_test_ip=

export my_test_port=

export my_test_reserved=

==================================================================

·使用xml生成器转换:

./gen_xml.pl response 1 test.h

·生成的xml文件以及data文件如下:

response.xml

<packet type="struct" repeat="1" value="response" endian="1">

<result type="int" value="$response_result" repeat="1"/>

</packet> ==============================================================

response.data

==============================================================

export response_result=

==============================================================

·可以对上面产生的data文件中的环境变量赋值,如下:

export my_test_cmd=2

export my_test_ip=1234

export my_test_port=345

export my_test_reserved=0

 

2使用sender收发包

Ø 通过写shell脚本调用sender工具实现发包功能

Ø 具体使用方法:(假定发送my_test结构体的内容后,得到的回复是response结构体的内容)使用上面示例的结构体my_test.h,以及使用转换器生成的xml文件以及data文件(下面为脚本文件my_test.sh):

source my_test.data

SRTSERVER=10.81.15.41

PORT=20120

sender -i $SRTSERVER -p $PORT –s my_test.xml –c response.xml

Ø 在实际的使用环境中可以修改xml文件中结构体变量对应的环境变量的名字,然后在shell脚本中对此环境变量重新复制,并使用export使此环境变量生效

(baiduqa,邮箱:qablog@baidu.com)

 











本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/744455,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
XTCP 一个便捷的TCP消息包拼装和解析框架
XTCP 一个便捷的TCP消息包拼装和解析框架
0 0
【游戏】服务器性能测试(五)网络协议包序列化
网络游戏前后端通信的消息协议始终是基于制定的规则,即发送端使用什么样的方式进行序列化,接收端就需要使用对应的方式进行反序列化,只有这样才能保证发收双方能够正常“交流” 消息协议的组成离不开基础数据类型,这些数据类型包括单字符(char)、短整型(short)、整型(int)、长整型(long long)、浮点数(float,double)、字符串(char* / string)。这些数据类型具体占多少字节可以参考游戏协议测试一:协议测试介绍。
0 0
如何使用网络库实现应用级消息收发
网络客户端ISocketClient和网络会话ISocketSession都继承了ISocketRemoteISocketRemote表示远程通信,核心就是收发数据。下面是ISocketRemote接口的主要实现 /// 远程通信Socket,仅具有收发功能 public interface...
799 0
网络数据包收发流程(二):不配置NAPI的情况
上一篇讲的是内核配置成NAPI的情况,那也是绝大多数内核使用的配置现在讲讲内核不配置成NAPI时的情况一、no NAPI 数据结构不配置NAPI的时候,网络设备不使用自己的napi_struct结构,所有网络设备驱动都使用同一个napi_struct,即cpu私有变量__get_cpu_var(softnet_data).backlog每当收到数据包时,网络设备驱动会把__get_cpu_var(softnet_data).backlog挂到__get_cpu_var(softnet_data).poll_list上面。
693 0
网络数据包收发流程(一):从驱动到协议栈
早就想整理网络数据包收发流程了,一直太懒没动笔。今天下决心写了一、硬件环境 intel82546:PHY与MAC集成在一起的PCI网卡芯片,很强大 bcm5461:   PHY芯片,与之对应的MAC是TSEC TSEC:      Three Speed Ethernet Controller,三速以太网控制器,PowerPc 架构CPU里面的MAC模块             注意,TSEC内部有DMA子模块  话说现在的CPU越来越牛叉了,什么功能都往里面加,最常见的如MAC功能。
1443 0
kernel笔记——网络收发包流程
本文将介绍网络连接建立的过程、收发包流程,以及其中应用层、tcp层、ip层、设备层和驱动层各层发挥的作用。   应用层 对于使用socket进行网络连接的服务器端程序,我们会先调用socket函数创建一个套接字: fd = socket(AF_INET, SOCK_STREAM, 0); 以上指定了连接协议,socket调用返回一个文件句柄,与socket文件对应的inode不在磁盘上,而是存在于内存。
1867 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载