博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
winsocket客户端编程以及jmeter外部调用
阅读量:4328 次
发布时间:2019-06-06

本文共 7115 字,大约阅读时间需要 23 分钟。

1 public class SocketClient {  2 OutputStream clientout = null;  3 InputStream clienIn = null;  4 byte[] b = new byte[1024];  5 // String sendstr="From client 111";  6 static String hex = "";  7 Socket socket = null;  8 static String hexStr = "0123456789ABCDEF";  9 long diff1, diff2, start1, start2, end1, end2; 10 SocketAddress socketAddress = null; 11  12 /** 13 * 连接、获取流 14 */ 15 public String CallClient(String serverIp, int port, String fileName, 16 int timeout1, int timeout2, String successCode) throws IOException { 17 try { 18 socketAddress = new InetSocketAddress(serverIp, port); 19 long start1 = System.currentTimeMillis(); 20 socket = new Socket(); 21 socket.connect(socketAddress, timeout1); 22 long end1 = System.currentTimeMillis(); 23 diff1 = end1 - start1; 24 } catch (BindException e) { 25 //System.out.println("IP地址或端口绑定异常"); 26 socket.close(); 27 return "IP地址或端口绑定异常!"; 28 } catch (UnknownHostException e) { 29 socket.close(); 30 return "未识别主机地址!"; 31 } catch (SocketTimeoutException e) { 32 socket.close(); 33 return "连接超时!"; 34 } catch (ConnectException e) { 35 socket.close(); 36 return "拒绝连接!"; 37 } catch (Exception e) { 38 socket.close(); 39 return "连接失败!"; 40 } 41  42 try { 43 System.out.println("连接建立:端口" + socket.getLocalPort()); 44 clientout = socket.getOutputStream(); 45 clienIn = socket.getInputStream(); 46 hex = file(fileName); 47 byte[] buffer = HexStringToBinary(hex); 48 clientout.write(buffer); 49 // for (byte b : buffer) { 50 // System.out.print(b); 51 // } 52 clientout.flush(); 53 } catch (UnknownHostException e) { 54 e.printStackTrace(); 55 } catch (IOException e) { 56 e.printStackTrace(); 57 } 58  59 /** 60 * 返回response 61 */ 62 Reader reader = new InputStreamReader(clienIn); 63 char chars[] = new char[64]; 64 int len; 65 StringBuffer sb = new StringBuffer(); 66 try { 67 socket.setSoTimeout(timeout2); 68 while ((len = reader.read(chars)) != -1) { 69 sb.append(new String(chars, 0, len)); 70 } 71 } catch (SocketTimeoutException e) { 72 socket.close(); 73 return "Socket is closed"; 74 } 75 catch (IllegalArgumentException e) { 76 socket.close(); 77 return "timeout can't be negative"; 78 } 79 clienIn.close(); 80 clientout.close(); 81 socket.close(); 82 String resString = sb.toString(); 83 if (resString.contains(successCode)) { 84 System.out.println("true"); 85 return successCode; 86 } else { 87 System.err.println("false"); 88 return resString; 89 } 90 } 91  92 /** 93 * 数组转换成十六进制字符串 94 *  95 * @param byte[] 96 * @return HexString 97 */ 98 public static final String bytesToHexString(byte[] bArray) { 99 StringBuffer sb = new StringBuffer(bArray.length);100 String sTemp;101 for (int i = 0; i < bArray.length; i++) {102 sTemp = Integer.toHexString(0xFF & bArray[i]);103 if (sTemp.length() < 2)104 sb.append(0);105 sb.append(sTemp.toUpperCase());106 }107 return sb.toString();108 }109 110 /**111 * 报文处理112 * 113 * @param hexString114 * @return 将十六进制字符转换为字节数组115 */116 public static byte[] HexStringToBinary(String hexString) {117 // hexString的长度对2取整,作为bytes的长度118 //    System.out.println("发送报文:" + hexString);119 int len = hexString.length() / 2;120 byte[] bytes = new byte[len];121 byte high = 0;// 字节高四位122 byte low = 0; // 字节低四位123 for (int i = 0; i < len; i++) {124 // 右移四位得到高位125 high = (byte) ((hexStr.indexOf(hexString.charAt(2 * i))) << 4);126 low = (byte) hexStr.indexOf(hexString.charAt(2 * i + 1));127 bytes[i] = (byte) (high | low);// 高地位做或运算128 }129 return bytes;130 }131 132 /**133 * 从文件中获取报文text134 * 135 * @return136 */137 public String file(String filename) {138 File file = new File(filename);139 BufferedReader reader = null;140 StringBuffer sb = new StringBuffer();141 try {142 reader = new BufferedReader(new FileReader(file));143 String tempString = null;144 // 一次读入一行,直到读入null为文件结束145 while ((tempString = reader.readLine()) != null) {146 // 显示行号147 sb = sb.append(tempString);148 }149 reader.close();150 } catch (FileNotFoundException e) {151 e.printStackTrace();152 } catch (IOException e) {153 e.printStackTrace();154 }155 return sb.toString().replace("\t", "").replace("\n", "").replace(" ", "");156 }157 }158 159  160 161 ****************************************************************************162 163 jmeter调用部分164 165 /getDefaultParameters方法:主要用于设置传入的参数 166 //setupTest方法:为初始化方法,用于初始化性能测试时的每个线程 167 //runTest方法:为性能测试时的线程运行体 168 //teardownTest方法:为测试结束方法,用于结束性能测试中的每个线程169 170 public class jmeter extends AbstractJavaSamplerClient {171 172 private String serverIp;173 private int serverPort;174 private String file;175 private int timeout1;//连接超时176 private int timeout2;//接收超时177 private String successCode;178 @Override179 //runTest方法:为性能测试时的线程运行体 180 public SampleResult runTest(JavaSamplerContext sc){181 serverIp=sc.getParameter("serverIp"); 182 serverPort=Integer.valueOf(sc.getParameter("serverPort"));183 file=sc.getParameter("file"); 184 timeout1=Integer.valueOf(sc.getParameter("timeout1"));185 timeout2=Integer.valueOf(sc.getParameter("timeout2"));186 successCode=sc.getParameter("successCode"); 187 188 SampleResult sr=new SampleResult();189 sr.setSampleLabel("Socket Test");190 try{191 sr.sampleStart();//jmeter开始统计响应时间标记192 String receive;193 SocketClient c=new SocketClient(); 194 receive=c.CallClient(serverIp,serverPort,file,timeout1,timeout2,successCode);195 // System.out.println(receive);196 if (receive.equals(successCode)) {197 sr.setResponseMessage("返回:"+receive.toString());198 //System.out.println("response:"+receive.toString());199 sr.setDataType(SampleResult.TEXT);200 sr.setSuccessful(true);201 }202 else {203 sr.setResponseMessage("报错报文:"+receive.toString());204 sr.setSuccessful(false);205 }206 }207 catch(Exception e){208 e.printStackTrace();209 sr.setSuccessful(false);210 }211 finally{212 sr.sampleEnd();//jmeter计时结束213 }214 return sr;215 }216 @Override217 //getDefaultParameters方法:主要用于设置传入的参数 218 public Arguments getDefaultParameters(){219 Arguments params=new Arguments();220 params.addArgument("serverIp", "127.0.0.1");//设置参数,并赋予默认值1 221 params.addArgument("serverPort", "8009");//设置参数,并赋予默认值2222 params.addArgument("file", "D:/EL04.tlt");223 params.addArgument("timeout1", "10000");224 params.addArgument("timeout2", "10000");225 params.addArgument("successCode", "AAAAAA");226 return params;227 }228 @Override229 public void setupTest(JavaSamplerContext context){230 super.setupTest(context);231 }232 @Override233 public void teardownTest(JavaSamplerContext context){234 super.teardownTest(context);235 }236 237 /***238 * 测试接口 239 * @param args240 */241 public static void main(String[] args) 242 { 243 Arguments params = new Arguments(); 244 params.addArgument("serverIp", "127.0.0.1");//设置参数,并赋予默认值1 245 params.addArgument("serverPort", "8002");//设置参数,并赋予默认值2246 params.addArgument("file", "D:/EL04.tlt");247 params.addArgument("timeout1", "10000");248 params.addArgument("timeout2", "10000");249 params.addArgument("successCode", "AAAAAA");250 JavaSamplerContext arg0 = new JavaSamplerContext(params); 251 jmeter test = new jmeter(); 252 test.setupTest(arg0); 253 test.runTest(arg0);254 test.teardownTest(arg0); 255 }256 257 }

 

转载于:https://www.cnblogs.com/fanfly0517/p/4526771.html

你可能感兴趣的文章
jquery使用$.each()
查看>>
Sybase 15.7 开发版下载(非注册)
查看>>
P1527 [国家集训队]矩阵乘法
查看>>
java 包(package)
查看>>
android Service介绍
查看>>
[MySQL 5.6] GTID实现、运维变化及存在的bug
查看>>
css钻石旋转实现
查看>>
sencha touch list infinite 属性
查看>>
指令——cat
查看>>
RabbitMQ代码操作之发消息和序列化机制
查看>>
4.Dotnet-Core部署到IIS
查看>>
Guitar and Music Theory
查看>>
用SQL命令查看Mysql数据库大小
查看>>
关于 Python
查看>>
贝叶斯网络
查看>>
SpringBoot整合ElasticSearch实现多版本的兼容
查看>>
ajax url参数中文乱码解决
查看>>
Thread Runnable 区别
查看>>
ORACLE JOB 设置
查看>>
微信小程序想要最短服务路径
查看>>