qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

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

/* 
     * 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  

posted on 2012-06-19 11:27 顺其自然EVO 阅读(1158) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年6月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜