zoukankan      html  css  js  c++  java
  • 【转】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(" ", "").replace(" ", "").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 }
  • 相关阅读:
    《DSP using MATLAB》Problem 6.17
    一些老物件
    《DSP using MATLAB》Problem 6.16
    《DSP using MATLAB》Problem 6.15
    《DSP using MATLAB》Problem 6.14
    《DSP using MATLAB》Problem 6.13
    《DSP using MATLAB》Problem 6.12
    《DSP using MATLAB》Problem 6.11
    P1414 又是毕业季II
    Trie树
  • 原文地址:https://www.cnblogs.com/blongfree/p/4980873.html
Copyright © 2011-2022 走看看