缓冲区函数:
lrs_free_buffer 释放分配给缓冲区的内存
lrs_get_buffer_by_name 从数据文件中获取缓冲区及其大小
lrs_get_last_received_buffer 获取套接字上接收到的后的缓冲区及其大小
lrs_get_last_received_buffer_size 获取套接字上接收到的后一个缓冲区的大小
lrs_get_received_buffer 获取后接收到的缓冲区或其一部分
lrs_get_static_buffer 获取静态缓冲区或其一部分
lrs_get_user_buffer 获取套接字的用户数据的内容
lrs_get_user_buffer_size 获取套接字的用户数据的大小
lrs_set_send_buffer 指定要在套接字上发送的缓冲区
  环境函数:
  lrs_cleanup 终止Windows套接字 DLL 的使用
  lrs_startup 初始化 Windows 套接字 DLL
  关联语句函数:
  lrs_save_param 将静态或接收到的缓冲区(或缓冲区部分)保存到参数中
  lrs_save_param_ex 将用户、静态或接收到的缓冲区(或缓冲区部分)保存到参数中
  lrs_save_searched_string 在静态或接收到的缓冲区中搜索出现的字符串,将出现字符串的缓冲区部分保存到参数中
  转换函数:
  lrs_ascii_to_ebcdic 将缓冲区数据从 ASCII 格式转换成 EBCDIC 格式
  lrs_decimal_to_hex_string 将十进制整数转换为十六进制字符串
  lrs_ebcdic_to_ascii 将缓冲区数据从 EBCDIC 格式转换成ASCII 格式
  lrs_hex_string_to_int 将十六进制字符串转换为整数
  超时函数:(这一堆函数,是可以对同一个socket生效的)
  lrs_set_accept_timeout 为接受套接字设置超时
  lrs_set_connect_timeout 为连接到套接字设置超时
  lrs_set_recv_timeout 执行lrs_receive命令后,等待服务器返回消息的超时时间,即服务器的响应时间。
  lrs_set_recv_timeout2 创建连接成功,接收到服务器返回的消息后,获取匹配消息的超时时间。lrs_receive接收到数据后,会和预期的数据长度进行比较,如果长度不匹配,它将重新从套接字上读取数据,直到超时为止。
  lrs_set_send_timeout 为发送套接字数据设置超时
  六、实战讲解
  在此只做简单的知识普及,便于快速上手编写socket测试脚本。简述创建连接,收发协议,关闭连接的过程。
  初始化
//存放通信返回报文
char * ActualBuffer="";
//存放返回报文长度,切记附初值
int numberOfResponse = -1;
//链接是否创建成功,判断值
int rc = 0;
//返回报文是否成功,判断值
int msgOk=-1;
//存放返回报文
char * position="";
//返回报文是否成功标识
char * passMsg="succee";
 服务器监听
//--------------创建连接-----------------
rc= lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=<RemoteHost>", LrsLastArg);
if (rc==0){
//判断连接是否创建成功
lr_output_message("Socket was successfully created ");
}
else{
lr_output_message("An error occurred while creating the socket, Error Code: %d", rc);
}
//--------------创建连接-----------------
  收发协议
lrs_send("socket0", "buf0", LrsLastArg);
//往“socket0”发送"buf0"
lrs_set_receive_option(EndMarker, BinaryStringTerminator, "</html>");
//设置接收协议包选项,注"</html>"以实际定义协议为准,如果不设置次项。执行到lrs_receive的时候,log里面打印Waiting for writable socket 10
//secs, 0 usecs,都需要等待10秒钟。是这样的,因为你在data.ws中定义了recv buffer的长度,例如你定义为100,但是socket上的返回buffer长度不
//是100,这时候,loadrunner会尝试再次去读取,直到读到长度为100的buffer才算成功。
lrs_receive("socket0", "buf1","Flags=MSG_PEEK ", LrsLastArg);
//将“socket0”中返回的数据存放到“buf1”中
  参数配置
  可能细心的同学已经发现了,buf0与buf1是从哪里来的。其实这俩兄弟是在data.ws中被定义的,如下所示:
  ;WSRData 2 1
  send buf0 5120
  "<参数化>"
  recv buf1 1024
  -1
  5120:此数值为socket协议传输内容长度,切记严格输入正确长度值。
  "<参数化>":为buf0所传输内容。相对于loadrunner的http协议参数用{}来说,socket协议参数化采用<>作为定义符。
  接收参数判断
  在做了接收之后,我们需要提取“buf1”中的某些关键字符作为通信成功标识。
//获取套接字上接收到的后的缓冲区及其大小
lrs_get_last_received_buffer("socket0",&ActualBuffer,&numberOfResponse);
//查询返回报文是否成功
position = (char *)strstr(ActualBuffer, passMsg);
// strstr has returned the address. Now calculate * the offset from the beginning of str
msgOk = (int)(position - ActualBuffer + 1);
if(msgOk>0){
lr_end_transaction("核心对私维护", LR_PASS);
lr_output_message("本次交易:%s",ActualBuffer);
}
else{
lr_end_transaction("核心对私维护", LR_FAIL);
lr_error_message("本次交易:%s",ActualBuffer);
}
关闭连接
//--------------断开socket--------------
lrs_disable_socket("socket0", DISABLE_SEND_RECV);
//--------------关闭socket--------------
lrs_close_socket("socket0");
  六、总结
  简要描述了利用Loadrunner编写socket性能测试脚本的过程