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

    xiaoxiao2022-07-15  153

    /*       * LoadRunner Java script. (Build: 15)       * Script Description:        *       * 作者:谷博涛       * 制作时间:2012-1-18       * E-mail:gubotao@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  

    ====================================分割线================================

    最新内容请见作者的GitHub页:http://qaseven.github.io/

    最新回复(0)