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 ...
随机推荐
- 栈,队列的java实现
介绍 http://501565246-qq-com.iteye.com/blog/2047078 实现: http://blog.csdn.net/zsw101259/article/details ...
- Java 如何将String转化为Int
在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换. 例1: 1 2 3 4 5 6 S ...
- XE7 & IOS开发之开发账号(2):发布证书、发布授权profile的申请使用,附Ad hoc真机调试、生成ipa文件演示(XCode所有版本通用,有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...
- sqlserver ,left join 不仅可以join表,还可以是一个结果集
SELECT MA.NAME AS MakeName , M.ID AS ModelId , M.Name AS ModelName , M.Warranty AS ModelWarranty , S ...
- jquery 面板拖拽
在网上找了好多的例子 都不满足我所需要 在网上找了一篇关于easyui是一个拓展的demo 然后根据demo 把我所需要的东西进行再次拓展 满足我的需求 也不多说了 上代码 首先 你肯定是要导eas ...
- bash 相关的一些小代码片断
批量修改文件名: for i in *.html; do mv $i ${i/oldstring/newstring}; done; 批量替换文件内容: sed -i "s/oldstrin ...
- 美国安全公司HBGary——国家授命的黑客
入侵电脑,窃听用户,假身份上网——美国安全公司HBGary是电脑防护和间谍软件的供应商.而其客户中就有美国的国家安全机构.现在,该公司被偷的电子邮件可以让我们对其数字化战争中的业务做一个初步 ...
- JS function document.onclick(){}报错Syntax error on token "function", delete this token
JS function document.onclick(){}报错Syntax error on token "function", delete this token func ...
- 自己实现多线程的socket,socketserver源码剖析
1,IO多路复用 三种多路复用的机制:select.poll.epoll 用的多的两个:select和epoll 简单的说就是:1,select和poll所有平台都支持,epoll只有linux支持2 ...
- linux 目录下文件批量植入和删除,按日期打包
linux目录下文件批量植入 [root@greymouster http2]# find /usr/local/http2/htdocs/ -type f|xargs sed -i " ...