Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本

简介: Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本

脚本开发-利用loadrunner开发Windows Sockets协议脚本


 

实践举例

Socket服务端简单实现

 

 

新建Windows Sockets协议脚本:新建脚本时,协议选择“Windows Sockets

代码组织结构:

 

 



注:

strlen

函数功能:返回字符串的字节大小

 

函数原型:size_t strlen( const char *string);

 

 

运行结果:

lrs_receive_ex函数

 

 

 



lrs_receive函数

 


函数介绍

lrs_startup

函数功能:初始化WinSock DLL

 

函数原型:

int lrs_startup( int version );

 

参数说明:

versionWindows Socket的版本

 

返回值:函数执行成功则返回0,否则返回错误码

 

lrs_create_socket

函数功能:打开并初始化一个socket

 

函数原型:

int lrs_create_socket( char *s_desc, char *type, [ char* LocalHost,] [char* peer,] [char *backlog,] LrsLastArg );

参数说明:

s_desc:还未绑定的socket的描述符,即socket名称

type: socket类型,TCPUDP

LocalHost:可选参数,用于socket绑定的本地主机和端口,即客户端主机和端口,参数值格式:"LocalHost= host_name/port_number"host_name可以是主机名称,也可以是ip地址。通常该参数在多网卡的情况下使用。

peer:对等的远程主机和端口号,即服务器主机和端口,参数值格式:"RemoteHost=host_name/port_number"

backlog:可选参数,等待连接队列最大长度,参数值格式:Backlog=number

LrsLastArg:标识参数列表结束的标记

 

返回值:函数执行成功则返回0,否则返回错误码

注:

确立一条TCP连接的过程,需要经过以下步骤:

操作(Operation)

WinSock

函数(VuGen function

Client/Server

Open socket

socket

lrs_create_socket

client and server

Name socket

bind

lrs_create_socket

client (optional) and server

Prepare to associate with another socket

listen

lrs_create_socket

server

Initiate association

connect

lrs_create_socket

client

Complete association

accept

lrs_accept_connection

server

Receive/Send

recv/send

lrs_receive/ lrs_send

client and server

 

确立一条UDP连接的过程,需要经过以下步骤:

Operation

WinSock

VuGen function

Client/Server

Open socket

socket

lrs_create_socket

client and server

Name socket

bind

lrs_create_socket

client and server

Associate Sockets: Receive/Send

recvfrom /sendto

lrs_receive/ lrs_send

client and server

 

lrs_send

函数功能:发送数据

函数原型:

int lrs_send( char *s_desc, char *buf_desc, [char *target], [char *flags,] LrsLastArg );

 

参数说明:

s_desc:已连接socket的描述符,即socket名称

buf_desc:发送缓冲区描述符号,即缓冲区名称 

target:可选参数,目标主机即服务器主机名称、ip地址,参数值格式: "TargetSocket=host:port"

flags:可选参数,接收和发送标识,指定调用方式,参数值格式:"Flags=flags"

LrsLastArg:标识参数列表结束的标记

 

返回值:函数执行成功则返回0,否则返回错误码

 

注意:

1如果函数没能成功发送缓冲区buffer中的所有数据,会继续尝试发送,直到超时时间,如果函数发送期间找不到可写入数据的socket,也会继续查找,直到超时。函数发送超时默认10秒,可通过lrs_set_send_timeout设置发送超时时间。

2lrs_send发送数据成功,并不代表服务器接收成功。

 

lrs_set_send_timeout

函数功能:设置数据发送超时时间

 

函数原型:

void lrs_set_send_timeout( long sec, long u_sec );

 

参数说明:

sec:以秒(second)为单位的超时时间 

u_sec:以微秒(microsecond)为单位的超时时间

 

注意:总超时时间为sec + u_sec

 

lrs_receive

函数功能:接收、读取数据

 

函数原型:

int lrs_receive( char *s_desc, char *bufindex, [char *flags], LrsLastArg );

 

参数说明:

s_desc:已连接socket的描述符,即socket名称

bufindex:接收缓冲区描述符号,即缓冲区名称 

flags:可选参数,接收和发送标识,指定调用方式,参数值格式:"Flags=flags"

LrsLastArg:标识参数列表结束的标记

 

返回值:

函数执行成功则返回0,否则返回错误码。

 

注意:

函数执行成功并不代表接收完所有数据。如果远程服务器关闭了socket,函数执行完成不返回任何数据。

 

注意:

如果data.ws中设置的接收(recv)缓冲区和实际收到的数据大小不匹配,在读取未超时的情况下,函数会一直读取由socket“搬运”过来的数据,直到已读取换缓冲区大小的数据,如果读取超时则提前结束读取操作。默认的超时时间为10秒,可用lrs_set_recv_timeoutlrs_set_recv_timeout2函数进行设置。所以data.ws中的recv需要认真设置,或者用lrs_receive_ex替代。

 

如果接收的数据和设置的缓冲区大小不一致,会报类似如下日志,并继续运行

Action.c(10): Mismatch in buffer's length (expected 11 bytes, 10 bytes actually received, difference in 1 bytes)

 

lrs_receive_ex

函数功能:lrs_receive的扩展,接收指定长度的数据

函数原型:

int lrs_receive_ex( char *s_desc, char *bufindex, [char *flags,] [char *size,] [char *terminator,] [char *mismatch,] [char *RecordingSize,] LrsLastArg);

参数说明

s_desc:已连接socket的描述符,即socket名称

bufindex:发送缓冲区描述符号,即缓冲区名称 

flags:可选参数,接收和发送标识,指定调用方式,参数值格式:"Flags=flags"

size:指定接收的字节数,参数值格式:"NumberOfBytesToRecv=xx",仅用于TCP socket

terminator:标记待接收数据块的结束字符(),参数值格式:StringTerminator= value" or "BinaryStringTerminator= value",仅用于TCP socket

mismatch:大小、内容不匹配的判断标准,参数值格式:"Mismatch= value"。参数可选值:MISMATCH_SIZE (默认)MISMATCH_CONTENT

RecordingSize:录制期间接收的缓冲区大小,参数值格式:"RecordingSize"。仅用于TCP socket

LrsLastArg:标识参数列表结束的标记

 

lrs_set_recv_timeout

函数功能:设置接收数据超时时间。

 

函数原型:

void lrs_set_recv_timeout( long sec, long u_sec );

 

参数说明:

sec:以秒(second)为单位的超时时间,默认10s

u_sec:以微秒(microsecond)为单位的超时时间

 

lrs_disable_socket

函数功能:禁用socket的某个操作,注意不是网上说的,断开socket

 

函数原型:

int lrs_disable_socket( char *s_desc, int operation );

 

参数说明:

s_desc  A descriptor identifying a socket.

operation:需要禁用的操作:SEND, RECEIVE, SEND-RECEIVE。比如,如果需要禁用发送数据传递DISABLE_SEND,需要禁用所有活动(接收和发送),传递DISABLE_SEND_RECV

 

 

lrs_close_socket

函数功能:关闭socket

 

函数原型:

int lrs_close_socket( char *s_desc );

 

参数描述:

s_desc:已连接socket的描述符,即socket名称

 

返回值:函数执行成功则返回0,否则返回错误码

 

注意:

对于TCP socketlrs_close_socket函数会刷新所有还没发送的数据。

 

cleanup

函数功能:

终止WinSock DLL的使用。通常用于在脚本vuser_end action

 

函数原型:

int lrs_cleanup( );

 

注意:不是所有WinSocket应用都会调用该函数

目录
相关文章
|
17天前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
17 0
|
18天前
|
弹性计算 安全 Windows
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
通过远程桌面连接Windows服务器提示“由于协议错误,会话将被中断,请重新连接到远程计算机”错误怎么办?
|
2月前
|
Python Windows
python之windows脚本启动bat
python之windows脚本启动bat
|
25天前
|
弹性计算 安全 关系型数据库
阿里云国际版远程连接Windows系统的ECS服务器时提示协议错误
阿里云国际版远程连接Windows系统的ECS服务器时提示协议错误
|
27天前
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
38 0
|
2月前
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
3月前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
163 0
|
3月前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
182 0
|
3月前
|
安全 Shell Windows
记windows自定义bat脚本自启动
【8月更文挑战第27天】在Windows系统中,可让自定义bat脚本自启动的方法有两种:一是利用“启动”文件夹,通过创建bat脚本的快捷方式并将其放置于该文件夹;二是使用任务计划程序,创建一个启动时触发的任务来运行bat脚本。需确保脚本正确安全,避免对系统产生不良影响。
105 0
|
4月前
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
103 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt