基於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 |
====================================分割線================================
最新內容請見作者的GitHub頁:http://qaseven.github.io/
相關文章
- JAVA - 基於Socket的多執行緒通訊Java執行緒
- 基於多執行緒+協程的非同步增量式爬蟲執行緒非同步爬蟲
- 關於多執行緒協作的疑問執行緒
- 網路程式設計基礎-socket加入多執行緒程式設計執行緒
- 基於surging網路元件多協議適配的平臺化發展元件協議
- 多執行緒系列(1),多執行緒基礎執行緒
- 多執行緒系列(二):多執行緒基礎執行緒
- 基於TCP協議的Socket網路程式設計( )TCP協議程式設計
- 基於UDP協議的Socket網路程式設計UDP協議程式設計
- 多執行緒學習一(多執行緒基礎)執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- java--多執行緒之後臺執行緒Java執行緒
- 多執行緒基礎執行緒
- Java學習筆記之基於TCP協議的socketJava筆記TCP協議
- 手撕Java多執行緒(四)執行緒之間的協作Java執行緒
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- 多執行緒系列(三):執行緒池基礎執行緒
- 虛擬執行緒相對於Actor模型或平臺執行緒的主要優勢? - Reddit執行緒模型
- 基於python的多執行緒暴破指令碼Python執行緒指令碼
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- python中的socket+threading多執行緒Pythonthread執行緒
- 關於多執行緒控制執行緒
- 關於多執行緒(轉)執行緒
- java - 多執行緒基礎Java執行緒
- Java—多執行緒基礎Java執行緒
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- Java 多執行緒基礎(八)執行緒讓步Java執行緒
- 執行緒同步(windows平臺):事件執行緒Windows事件
- VC中ftp協議實現多執行緒斷點續傳(轉)FTP協議執行緒斷點
- java socket 通訊socketServer 服務端多執行緒JavaServer服務端執行緒
- 多執行緒和多執行緒同步執行緒
- 多執行緒程式設計基礎(二)-- 執行緒池的使用執行緒程式設計
- 執行緒和程式基礎以及多執行緒的基本使用(iOS)執行緒iOS
- C#多執行緒開發-執行緒基礎 01C#執行緒
- 網路協議之:socket協議詳解之Socket和Stream Socket協議
- 執行緒以及多執行緒,多程式的選擇執行緒
- 多執行緒-多執行緒常見的面試題執行緒面試題