loadrunner 编写socket脚本实例(附服务端实现)
一、socket背景知识
这个咱就不废话了,网上一搜一大堆
二、本实例实现的功能
服务端接收客户端发送的字符串,并返回"5678succ"共8个字符
三、服务端实现(java代码)
①MySocketServer.java
package serverSocketMultiThreadVer;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketServer {
public static void main(String[] args) {
// TODO Auto-generated method stub
try
{
//创建一个服务器端socket,指定绑定的端口,并监听此端口
//ServerSocket serverSocket=new ServerSocket(8820);
@SuppressWarnings("resource")
ServerSocket serverSocket=new ServerSocket(8820, 100, InetAddress.getByName("9.111.42.204"));
Socket socket=null;
int count=0;
System.out.println("***服务器即将启动,等待客户端的链接***");
//循环监听等待客户端的链接
while(true)
{
//调用accept()方法开始监听
socket=serverSocket.accept();
//创建一个新的线程
ServerThread serverThread=new ServerThread(socket);
//启动线程
serverThread.start();
count++;//统计客户端的数量
System.out.println("客户端第:"+count+"次访问");
InetAddress address=socket.getInetAddress();
System.out.println("当前客户端的IP:"+address.getHostAddress());
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
②ServerThread.java
package serverSocketMultiThreadVer;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread extends Thread {
// 和本线程相关的Socket
Socket socket = null;
public ServerThread(Socket socket) {
this.socket = socket;
}
//线程执行的操作,响应客户端的请求
public void run(){
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw=null;
DataOutputStream out1=null;
byte[] mybyte=new byte[8];
try {
//获取输入流,并读取客户端信息
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
out1=new DataOutputStream(socket.getOutputStream());
String info=null;
while((info=br.readLine())!=null){//循环读取客户端的信息
System.out.println("来自客户端的消息:"+info);
}
socket.shutdownInput();
//out1.writeUTF("1234"); 这种方法返回长度是实际字符的2倍。会增加客户端的处理难度
mybyte[0]=53;
mybyte[1]=54;
mybyte[2]=55;
mybyte[3]=56;
mybyte[4]='s';
mybyte[5]='u';
mybyte[6]='c';
mybyte[7]='c';
//out1.writeChars("5678");
out1.write(mybyte);//最好的方式是使用字节数组,否则调用该socket服务端的客户端程序有可能不能正常解析
out1.flush();
socket.shutdownOutput();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭资源
try {
if(out1!=null)
out1.close();
if(pw!=null)
pw.close();
if(os!=null)
os.close();
if(br!=null)
br.close();
if(isr!=null)
isr.close();
if(is!=null)
is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
四、客户端实现(loadrunner脚本)
①Action.c
#include "lrs.h"
Action()
{
char *Data;
int Size=0;
int rc=0;
//返回报文是否成功,判断值
int msgOk=-1;
char *position="";
//返回报文是否成功标识
char *passMsg="succ"; //需和服务端进行确认是否一定返回该字符串
int receive_code;
memset(&Data,0,8);
//建立socket
rc=lrs_create_socket("socket0","TCP","RemoteHost=9.111.42.204:8820",LrsLastArg);
if (0==rc) {
lr_output_message("Socket was successfully created ");
}
else
{
lr_output_message("An error occurred while creating the socket, Error Code: %d",rc);
}
//开始事务
lr_start_transaction("socket_trans");
//发送数据
lrs_send("socket0","buf0",LrsLastArg);
//结束发送
lrs_disable_socket("socket0", DISABLE_SEND);
//接收服务端发回的数据
receive_code=lrs_receive("socket0","buf1",LrsLastArg);
//获取最后返回的缓冲区的数据及其长度
lrs_get_last_received_buffer("socket0",&Data,&Size);
//获取passMsg在返回数据的位置
position=(char *)strstr(Data,passMsg);
msgOk=(int)(position-Data+1); //数组下标从0开始,因此加1以符合使用习惯
//保存参数
lrs_save_param_ex("socket0","user",Data,0,8,"ascii","new_parameter");
lrs_free_buffer(Data);
lr_output_message("The result's size is: %d.",Size);
lr_output_message("The receive code is: %d.",receive_code);
lr_output_message("The data socket server give is: %s",lr_eval_string("<new_parameter>"));
//根据msgOk的值,判断事务是否成功
if (msgOk>0) {
lr_end_transaction("socket_trans",LR_PASS);
}
else
{
lr_end_transaction("socket_trans",LR_FAIL);
}
//关闭打开的socket
lrs_close_socket("socket0");
return 0;
}
②data.ws
;WSRData 2 1
send buf0 10
"<NewParam>"
recv buf1 8
-1
loadrunner 编写socket脚本实例(附服务端实现)的更多相关文章
- 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述
一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 ...
- LoadRunner编写socket性能测试脚本
利用LoadRunner编写socket性能测试脚本 一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socke ...
- LR编写Socket脚本方法2(从文件读取报文)
之前,给大家分享了LoadRunner编写socket协议脚本的基本方法与规则,今天给大家分享下,如何从本地文件,读取内容,并作为报文,发送到服务端:该方法也是在工作中遇到的一个难点,想通过这种方 ...
- LoadRunner关联函数的脚本实例--如何操作关联参数
LoadRunner关联函数的脚本实例--如何操作关联参数 这几天一直在学习LoadRunner的VuGen编程,今天想对关联函数web_reg_save_param做详细的试验和研究: ~f6p q ...
- 基于socket.io客户端与服务端的相互通讯
socket.io是对websocket的封装,用于客户端与服务端的相互通讯.官网:https://socket.io/. 下面是socket.io的用法: 1.由于使用express开的本地服务,先 ...
- 客户端 new socket时候 就像服务端发起连接了
客户端 new socket时候 就像服务端发起连接了
- LoadRunner编写Socket协议脚本方法
本文主要介绍使用LoadRunner手工编写Windows Socket协议测试脚本的方法. 通过LoadRunner编写Windows Socket协议测试脚本,总体说来,比较简单.就像把大象放进冰 ...
- 基于socket的客户端和服务端聊天简单使用 附Demo
功能使用 服务端 分离一个不停接受客户端请求的线程 接受不客户端请求的线程中,再分离就收消息的线程 几大对象分别是 IPEndPoint IP终结点 服务端Socket,绑定终结点Bind,启动监听L ...
- LR编写Socket脚本方法1(XML/16进制报文data.ws格式)
本文主要讲述了Socket协议脚本的基础知识和编写方法,让大家能够在短时间内快速掌握简单的Socket协议脚本的编写方法.1.socket协议介绍Socket协议有万能协议之称,很多系统底层都是用的s ...
随机推荐
- javascript匿名函数应用
1.给指定对象新增一些属性的写法: /*给一个对象增加属性*/ var myDate=(function(obj){ obj.addName=function(name){ this.name=nam ...
- Android SQLiteOpenHelper类的使用
SQLiteOpenHelper类是Android平台提供的用于SQLite数据库的创建.打开以及版本管理的帮助类.一般需要继承并这个类并实现它的onCreate和onUpgrade方法,在构造方法中 ...
- 编译器zynq设置环境变量
设置临时环境变量export CROSS_COMPILE=arm-xilinx-linux-gnueabi- export PATH=/work/tool/cross_compiler/bin:$PA ...
- [ 转载 ] kernel32.BaseThreadInitThunk
Edited by wap2k, 20 October 2014 - 07:52 PM. This function is called to start a Win32 thread. Its pu ...
- SQL语句Where中使用别名作为判断条件
当我们使用某个表达式作为输出的一列时,我们无法再Where条件中直接使用该列作判断条件. 例如下面的SQL语句: select id, (c1 + c2) as s from t1 where ...
- 基于JS功能强大的日期插件Kalendae
开发中需要一个日期插件,可以在zepto下使用,可以选择日期段,可以设置不可选日期 找到一个完全满足的,并且基于JS不依赖于任何库. 在线演示:http://chipersoft.com/Kalend ...
- 转@ManyToMany- annotation关系映射篇(下)
原文:http://blog.sina.com.cn/s/blog_6fef491d0100obdd.html 终于要说ManyToMany了 场景:Product和Customer. 先看TestP ...
- django--模板(七)
1.模板加载 一个项目可以有多个应用,每个应用下都可以有模板,思考模板的查找顺序?
- listview 的适配器 getview 随着软件健盘显示和隐藏,出现多个空的position问题
AndroidManifest 里配置 android:windowSoftInputMode="stateHidden|adjustPan" listview的宽高设置成fill ...
- LR12.53—使用HP网络导游示例应用程序
本教程使用 的HP Web之旅,一个样本的基于Web的旅行社系统,向人们展示LoadRunner将如何作为负载测试解决方案.惠普网络旅游用户连接到Web服务器,搜索航班,预订机票,检查飞行路线. 虽然 ...