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 ...
随机推荐
- Talk about VR
Virtual reality --VR ,虚拟现实,是利用计算机模拟一个三维空间的世界,提供用户关于各种感官的模拟,让用户感觉身临其境,可以及时,没有限制地观察三维空间内的事物,用户进行位置移动时, ...
- 自制MFC消息响应定位器+原理分析
mfc里面有张消息映射表(MESSAGE_MAP),消息都是通过这张表来分发到相应函数里的. 这个是我自制的定位器,从vc6.0到现在的2013生成的mfc都可以用,全静态扫描并已处理动态基址. 下面 ...
- Node ExpressJs server的路径设置
一.动态页面的路径: app.METHOD(PATH, HANDLER)Where: * app is an instance of express.* METHOD is an HTTP reque ...
- 嵌套 QQ、微博 通讯工具到HTML中
自己QQ.微博的实例: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defa ...
- 使用struts通配符报错
报错截图如下: 主要原因是:对大小写敏感. struts.xml StudentAction.java jsp页面:(重点就是这里,锚里面需要特别注意,大小写应该与struts.xml里面的保持一致, ...
- Mongodb集群搭建过程及常见错误
Replica Sets MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只 有一台是用于写操作.正是由于这个情况,为 MongoDB 提供了数据一致性的保障.担当 ...
- C#调用C++编写的DLL函数, 以及各种类型的参数传递 (转载)
C#调用C++编写的DLL函数, 以及各种类型的参数传递 1. 如果函数只有传入参数,比如: C/C++ Code Copy Code To Clipboard //C++中的输出函数 int ...
- zend framework2 下载及安装
1.安装XAMPP 2.安装zend studio 3.在GITHUB上下载一个zendframework模板,插入到IDE中 4.将下载的zend framework2文件夹解压放在vendor文件 ...
- iOS中UIImageView的填充模式
UIImageView的填充模式 属性名称 imageV.contentMode枚举属性: @"UIViewContentModeScaleToFill", // 拉伸自适应填满整 ...
- 通过sqoop来传输mysql/oracle/vertica数据至HBASE
首先要注意将连接用的jar包,放到sqoop目录下,我的是/var/lib/sqoop 如果没有主键,则要加上-m 1 export正确的jdk目录 当做key的列必须唯一存在,不然报错 --mysq ...