【转】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新建新项目, ...
随机推荐
- flume-ng源码阅读memory-channel(原创)
org.apache.flume.channel.MemoryChannel类是Flume-NG的memory-channel. private LinkedBlockingDeque<Even ...
- 换个思维,boot结合vue做后台管理
可以添加,可以删除.动态的添加数据. 不用操作dom,只要操作json数据即可. <form class="form-horizontal addForm" id=" ...
- c++中的函数对象《未完成》
头文件: #pragma once #include<iostream> #include<vector> using namespace std; class Student ...
- mysql 程序编写实例
DELIMITER $$ drop trigger if exists `updata_depart_lead_name`;-- 新建触发器 ---- 功能:在更新部门的领导编号是,自动填写部门领导名 ...
- 从互信息的角度来理解tf-idf
先介绍tf idf 在一份给定的文件里,词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率.这个数字是对词数(term count)的归一化,以防止它偏向长的文件.( ...
- Eclipse的编码格式设置
在使用Eclipse开发中,许多文件编码默认是ISO-8859-1,不支持中文(如常用的JSP).这样我们每次建文件都要手动改编码,其实我们可以在设置文件默认编码,今后再创建时就不用每次修改编码了, ...
- 二 web爬虫,scrapy模块以及相关依赖模块安装
当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip install Scrapy 手动源码安装,比较麻烦要自己手动安 ...
- plsql连接不上oracle
由于oracle存在64位的,但是目前plsql只有32位.导致登录后报错 -------------------------------------------------------------- ...
- DOS命令说明
(转自:http://blog.csdn.net/mydriverc/article/details/2047152) 1 errorlevel dir cd md rd del ren cls ty ...
- UI- UIView控件知识点回顾
// 通过一个frame来初始化一个UI控件 - (id)initWithFrame:(CGRect)frame; // YES:能够跟用户进行交互 @property(nonatomic,gett ...