您的位置:首页 > 编程语言 > Java开发

基于Loadrunner平台Socket协议的JavaVuser(多线程)

2012-01-18 16:58 507 查看
/*
* LoadRunner Java script. (Build: 15)
* Script Description:
*
* 作者:谷博涛
* 制作时间:2012-1-18
* E-mail:captain_gbt@foxmail.com
* Loadrunner:11.00
*
* 内容概要:
* 模拟基于Socket协议的即时消息系统中的客户端行为LR脚本,
* 为模拟真实IM客户端,接收消息和发送消息分两个线程工作。
*
*/

import lrapi.lr;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;

public class Actions
{
// 客户端
private Socket client;
// 房间号
private String roomId;
// 用户ID
private String id;
// 输出流
private OutputStream out;
// 输入流
private InputStream in;
// 连接标志
//private boolean connFlag = false;
private  AtomicBoolean connFlag =new AtomicBoolean(false);

// 客户端是否结束标志
//private boolean endFlag = true;
private  AtomicBoolean endFlag =new AtomicBoolean(true);

public int init() throws Throwable {
connect();
//lr.think_time(10);
return 0;
}//end of init

public int action() throws Throwable {
sendAction();
return 0;
}//end of action

public int end() throws Throwable {
sendEnd();
return 0;
}//end of end

//====主题代码==================//

//连接服务器
private void connect() {
try {
client = new Socket("127.0.0.1", 5222);
System.out.println("connect success!!!");
out = client.getOutputStream();
in = client.getInputStream();
receiveAction();
login();
} catch (UnknownHostException e) {
System.out.println("UnknownHostException=" + e);
e.printStackTrace();
} catch (IOException e) {
System.out.println("IOException=" + e);
e.printStackTrace();
}
}

//登录服务器
private void login() {
String loginMsg = "<msg type=\"login\" channel=\"CCTV1\"></msg>";
sendMsg(loginMsg);
}

//启动接收线程
private void receiveAction() {
new ReceiveThread().start();
}

//得到房间号码和用户ID
private void getEleVal(String msg) {
int index =0;

index = msg.indexOf("to");
msg = msg.substring(index + 4, msg.length());
index = msg.indexOf("'");
id = msg.substring(0, index);
System.out.println(roomId);

index = msg.indexOf("roomId");
msg = msg.substring(index + 8, msg.length());
index = msg.indexOf("'");
roomId = msg.substring(0, index);
System.out.println(id);

connFlag.set(true);
}

//发送消息
private void sendAction() {
if(connFlag.get()){
System.out.println("发送消息----->");
String msg = "<msg type=\"groupchat\" channel=\"CCTV1\" from=\"" + id
+ "\" to=\"" + roomId + "\"><body>test</body></msg>";

sendMsg(msg);
}
}

//调用写入流方法
private void sendMsg(String msg) {
//new SendThread(msg).start();
writeMsg(msg);
}

//将消息写入流
private void writeMsg(String msg) {
try {
if (out != null) {
out.write(msg.getBytes("UTF-8"));
out.flush();
}
} catch (Exception e) {
System.out.println("Exception=" + e);
}
}

//关闭客户端
private void sendEnd() {
endFlag.set(false);
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 接收消息线程类
*
* @author Administrator
*
*/
private class ReceiveThread extends Thread {
@Override
public void run() {
while (endFlag.get()) {// 循环接收消息
try {
int len = in.available();

if(len>0){
System.out.println(len);
byte[] bytes = new byte[len];
in.read(bytes);
String result = new String(bytes);
System.out.println("接收到的消息:" + result);

if(result != null && !"".equals(result)&& result.contains("res_bind")){
getEleVal(result);
}
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
}

//======发送消息线程类(本代码未用到)=========
private class SendThread extends Thread {
private String msg;

public SendThread(String msg) {
this.msg = msg;
}

@Override
public void run() {
if (connFlag.get()) {
writeMsg(msg);
}
}
}

}//end for class Actions

谷博涛

二零一二年 农历腊月廿五 下午

/article/8009240.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: