【转】WINSOCKET客户端编程以及JMETER外部调用
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 hexString
114 * @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 * 从文件中获取报文text
134 *
135 * @return
136 */
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 @Override
179 //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 @Override
217 //getDefaultParameters方法:主要用于设置传入的参数
218 public Arguments getDefaultParameters(){
219 Arguments params=new Arguments();
220 params.addArgument("serverIp", "127.0.0.1");//设置参数,并赋予默认值1
221 params.addArgument("serverPort", "8009");//设置参数,并赋予默认值2
222 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 @Override
229 public void setupTest(JavaSamplerContext context){
230 super.setupTest(context);
231 }
232 @Override
233 public void teardownTest(JavaSamplerContext context){
234 super.teardownTest(context);
235 }
236
237 /***
238 * 测试接口
239 * @param args
240 */
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");//设置参数,并赋予默认值2
246 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 }
|
【转】WINSOCKET客户端编程以及JMETER外部调用的更多相关文章
- Redis系列(三)-Redis发布订阅及客户端编程
阅读目录 发布订阅模型 Redis中的发布订阅 客户端编程示例 0.3版本Hredis 发布订阅模型 在应用级其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易 ...
- JAX-RS 2.0 REST客户端编程实例
JAX-RS 2.0 REST客户端编程实例 2014/01/28 | 分类: 基础技术, 教程 | 0 条评论 | 标签: JAX-RS, RESTFUL 分享到:3 本文由 ImportNew - ...
- go语言之进阶篇http客户端编程
1.http客户端编程 示例: http_server.go package main import ( "fmt" "net/http" ) //w, 给客户 ...
- 4 kafka集群部署及kafka生产者java客户端编程 + kafka消费者java客户端编程
本博文的主要内容有 kafka的单机模式部署 kafka的分布式模式部署 生产者java客户端编程 消费者java客户端编程 运行kafka ,需要依赖 zookeeper,你可以使用已有的 zo ...
- [Real World Haskell翻译]第22章 扩展示例:Web客户端编程
第22章 扩展示例:Web客户端编程 至此,您已经看到了如何与数据库交互,解析一些数据,以及处理错误.现在让我们更进了一步,引入Web客户端库的组合. 在本章,我们将开发一个真正的应用程序:一个播客下 ...
- AMQ学习笔记 - 02. JMS客户端编程模型
概述 客户端编程模型,是讲如何使用JMS API实现Java应用程序和JMS Provider的通信. 消息传送模式 消息传送模式又称为消息传送域,JMS API定义了两种模式:PTP和Pub/Sub ...
- zookeeper 实战案例分享:cruator客户端编程
上两篇介绍了zookeeper服务器端的安装和配置,今天分享下利用zookeeper客户端编程来实现配置文件的统一管理,包括文件添加.删除.更新的同步. 比如,连接数据库信息的配置文件,一般每个应用服 ...
- day03-hdfs的客户端操作\hdfs的java客户端编程
5.hdfs的客户端操作 客户端的理解 hdfs的客户端有多种形式: 1.网页形式 2.命令行形式 3.客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网 文件的切块大小和存储的副 ...
- Unity3D 客户端编程
Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程. VS2017 之 MYSQL实体数据模 1:打开unity新建新项目, ...
随机推荐
- SQLServer行列转换PIVOT函数中聚合函数的使用意义及选择
例子:https://blog.csdn.net/wikey_zhang/article/details/76849826 DECLARE @limitDay INT;SET @limitDay = ...
- showdoc.js代码
//页面加载完就执行 $(function(){ //自动根据url把当前菜单激活 var page_id = GetQueryString('page_id'); //如果中没有指定page_id, ...
- mysql学习笔记(Centos下rpm编译配置+远程访问)
新工作以来,博主感觉天天都很忙,博客已经好久没有写了 从昨天开始弄centos服务器中搭建mysql5.6,由于yum最新版本只有5.1的所以折腾到现在 首先看看是否已安装过其他版本的mysql [r ...
- python学习笔记(SMTP邮件发送)
想着给框架添加邮件发送功能.所以整理下python下邮件发送功能 首先python是支持邮件的发送.内置smtp库.支持发送纯文本.HTML及添加附件的邮件 之后是邮箱.像163.qq.新浪等邮箱默认 ...
- javascript 对象简单介绍(一)
JavaScript 对象JavaScript 中的所有事物都是对象:字符串.数值.数组.函数...此外,JavaScript 允许自定义对象.所有事物都是对象JavaScript 提供多个内建对象, ...
- 51nod-1201-数位dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 1201 整数划分 基准时间限制:1 秒 空间限制:131072 ...
- null与""的区别
两者的区别与 “数字0和没有不是同一种概念”是一个道理.null是空对象,""是空字符串null可以赋值给任何对象,而""就不行了,只能赋值给字符串对象如:St ...
- a标签设置锚点定位div
<a href="#5F">锚点5</a> </br></br></br></br></br>& ...
- LeetCode OJ:Find Peak Element(寻找峰值元素)
A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...
- LeetCode OJ:First Bad Version(首个坏版本)
You are a product manager and currently leading a team to develop a new product. Unfortunately, the ...