- /*
- * LoadRunner Java script. (Build: 15)
- * Script Description:
- *
- * 作者:谷博濤
- * 製作時間:2012-1-18
- * E-mail:[email protected]
- * 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
谷博濤
二零一二年 農曆臘月廿五 下午
http://blog.csdn.net/captain_gbt/article/details/7209570