一、socket背景知识

  这个咱就不废话了,网上一搜一大堆

二、本实例实现的功能

  服务端接收客户端发送的字符串,并返回"5678succ"共8个字符

三、服务端实现(java代码)

  ①MySocketServer.java

package serverSocketMultiThreadVer;

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class MySocketServer {

public static void main(String[] args) {
        // TODO Auto-generated method stub
        try
        {
            //创建一个服务器端socket,指定绑定的端口,并监听此端口
            //ServerSocket serverSocket=new ServerSocket(8820);
            @SuppressWarnings("resource")
            ServerSocket serverSocket=new ServerSocket(8820, 100, InetAddress.getByName("9.111.42.204"));
            Socket socket=null;
            
            int count=0;
            System.out.println("***服务器即将启动,等待客户端的链接***");
            
            //循环监听等待客户端的链接
            while(true)
            {
                //调用accept()方法开始监听
                socket=serverSocket.accept();
                
                //创建一个新的线程
                ServerThread serverThread=new ServerThread(socket);
                //启动线程
                serverThread.start();

count++;//统计客户端的数量
                System.out.println("客户端第:"+count+"次访问");
                InetAddress address=socket.getInetAddress();
                System.out.println("当前客户端的IP:"+address.getHostAddress());
            }
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }

}

  ②ServerThread.java

package serverSocketMultiThreadVer;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerThread extends Thread {

// 和本线程相关的Socket
    Socket socket = null;

public ServerThread(Socket socket) {
        this.socket = socket;
    }

//线程执行的操作,响应客户端的请求
    public void run(){
        InputStream is=null;
        InputStreamReader isr=null;
        BufferedReader br=null;
        OutputStream os=null;
        PrintWriter pw=null;
        DataOutputStream out1=null;
        byte[] mybyte=new byte[8];
        try {
            //获取输入流,并读取客户端信息
            is = socket.getInputStream();
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);            
            out1=new DataOutputStream(socket.getOutputStream());
            
            String info=null;
            while((info=br.readLine())!=null){//循环读取客户端的信息
                System.out.println("来自客户端的消息:"+info);
               
            }
            socket.shutdownInput();
            //out1.writeUTF("1234");  这种方法返回长度是实际字符的2倍。会增加客户端的处理难度
            mybyte[0]=53;
            mybyte[1]=54;
            mybyte[2]=55;
            mybyte[3]=56;
            mybyte[4]='s';
            mybyte[5]='u';
            mybyte[6]='c';
            mybyte[7]='c';
            //out1.writeChars("5678");
            out1.write(mybyte);//最好的方式是使用字节数组,否则调用该socket服务端的客户端程序有可能不能正常解析
            out1.flush();
            socket.shutdownOutput();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //关闭资源
            try {
                if(out1!=null)
                    out1.close();
                if(pw!=null)
                    pw.close();
                if(os!=null)
                    os.close();
                if(br!=null)
                    br.close();
                if(isr!=null)
                    isr.close();
                if(is!=null)
                    is.close();
                if(socket!=null)
                    socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

四、客户端实现(loadrunner脚本)

  ①Action.c

#include "lrs.h"

Action()
{
    char *Data;
    int Size=0;
    int rc=0;
    //返回报文是否成功,判断值
    int msgOk=-1;
    char *position="";
    //返回报文是否成功标识
    char *passMsg="succ";   //需和服务端进行确认是否一定返回该字符串

int receive_code;
    memset(&Data,0,8);

//建立socket
    rc=lrs_create_socket("socket0","TCP","RemoteHost=9.111.42.204:8820",LrsLastArg);
    if (0==rc) {
        lr_output_message("Socket was successfully created ");
    }
    else
    {
        lr_output_message("An error occurred while creating the socket, Error Code: %d",rc);
    }

//开始事务
    lr_start_transaction("socket_trans");

//发送数据
    lrs_send("socket0","buf0",LrsLastArg);

//结束发送
    lrs_disable_socket("socket0", DISABLE_SEND);

//接收服务端发回的数据
    receive_code=lrs_receive("socket0","buf1",LrsLastArg);

//获取最后返回的缓冲区的数据及其长度
    lrs_get_last_received_buffer("socket0",&Data,&Size);

//获取passMsg在返回数据的位置
    position=(char *)strstr(Data,passMsg);
    msgOk=(int)(position-Data+1);  //数组下标从0开始,因此加1以符合使用习惯

//保存参数
    lrs_save_param_ex("socket0","user",Data,0,8,"ascii","new_parameter");
    lrs_free_buffer(Data);

lr_output_message("The result's size is: %d.",Size);
    lr_output_message("The receive code is: %d.",receive_code);
    lr_output_message("The data socket server give is: %s",lr_eval_string("<new_parameter>"));

//根据msgOk的值,判断事务是否成功
    if (msgOk>0) {
            lr_end_transaction("socket_trans",LR_PASS);
    }
    else
    {
            lr_end_transaction("socket_trans",LR_FAIL);
    }

//关闭打开的socket
     lrs_close_socket("socket0");

return 0;
}

  ②data.ws

;WSRData 2 1
send buf0 10
    "<NewParam>"

recv buf1 8

-1

loadrunner 编写socket脚本实例(附服务端实现)的更多相关文章

  1. 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述

            一.概述         Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作.     二.socket概述     ...

  2. LoadRunner编写socket性能测试脚本

    利用LoadRunner编写socket性能测试脚本 一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socke ...

  3. LR编写Socket脚本方法2(从文件读取报文)

      之前,给大家分享了LoadRunner编写socket协议脚本的基本方法与规则,今天给大家分享下,如何从本地文件,读取内容,并作为报文,发送到服务端:该方法也是在工作中遇到的一个难点,想通过这种方 ...

  4. LoadRunner关联函数的脚本实例--如何操作关联参数

    LoadRunner关联函数的脚本实例--如何操作关联参数 这几天一直在学习LoadRunner的VuGen编程,今天想对关联函数web_reg_save_param做详细的试验和研究: ~f6p q ...

  5. 基于socket.io客户端与服务端的相互通讯

    socket.io是对websocket的封装,用于客户端与服务端的相互通讯.官网:https://socket.io/. 下面是socket.io的用法: 1.由于使用express开的本地服务,先 ...

  6. 客户端 new socket时候 就像服务端发起连接了

    客户端 new socket时候  就像服务端发起连接了

  7. LoadRunner编写Socket协议脚本方法

    本文主要介绍使用LoadRunner手工编写Windows Socket协议测试脚本的方法. 通过LoadRunner编写Windows Socket协议测试脚本,总体说来,比较简单.就像把大象放进冰 ...

  8. 基于socket的客户端和服务端聊天简单使用 附Demo

    功能使用 服务端 分离一个不停接受客户端请求的线程 接受不客户端请求的线程中,再分离就收消息的线程 几大对象分别是 IPEndPoint IP终结点 服务端Socket,绑定终结点Bind,启动监听L ...

  9. LR编写Socket脚本方法1(XML/16进制报文data.ws格式)

    本文主要讲述了Socket协议脚本的基础知识和编写方法,让大家能够在短时间内快速掌握简单的Socket协议脚本的编写方法.1.socket协议介绍Socket协议有万能协议之称,很多系统底层都是用的s ...

随机推荐

  1. Oracle数据库体系结构及创建表结构

    Oracle服务器主要由实例.数据库.程序全局区和前台进程组成,其中实例就是用来提供管理数据库的功能:数据库由数据库文件组成,用来存储系统数据:实例可以进一步划分为系统全局区(SGA)和后台进程(PM ...

  2. Git——1

    集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器.中央服务器就好比是一个图 ...

  3. Ajax跨域访问

    Ajax如何跨域访问数据 最近在做项目的过程中遇到的问题,一个网站需要访问另外一个网站的数据,并且是通过脚本的方式,而由于同源策略的限制,开发人员不能再与外部服务器进行通信的时候使用XMLHttpRe ...

  4. XXX esx.problem.syslog.nonpersistent.formatOnHost not found XXX

    ESXi 主机的摘要选项卡报告以下错误:配置问题:XXX esx.problem.syslog.nonpersistent.formatOnHost 未找到 XXX (2101811)   Sympt ...

  5. http响应状态码大全

    http响应状态码大全 http状态返回代码 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码. http状态返回代码 代码   说明100   (继续) 请求者应当继续提出请求. 服 ...

  6. 剑指Offer:面试题31——连续子数组的最大和(java实现)

    问题描述 : 输入一个整数数组,数组里面有正数也有负数.数组中一个或连续几个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n) 思路1:常规解法,不知道怎么描述了.. 代码: bo ...

  7. jQuery检测滚动条(scroll)是否到达底部

    一.jQuery检测浏览器window滚动条到达底部 jQuery获取位置和尺寸相关函数: $(document).height()    获取整个页面的高度 $(window).height()   ...

  8. OCP认证之Oracle的SQL语言基础(一)

    一.Oracle命令类别 数据操纵语言(DML):select;insert;delete;update;merge 数据定义语言(DDL):create;alter;drop;truncate 事物 ...

  9. 通过rem编写自适应移动端要点

    直接上干货 1,dpr 苹果手机像素是2 普通安卓机是1 也就是说1像素下苹果需要的像素点是安卓机的两倍 所以一个需要15x15显示的图像安卓机仅需要提供15X15即可显示清楚 苹果手机需要要30X3 ...

  10. 关于tomcat小知识

    1.linux下的tomcat中有用于记录日志的catalina.out文件(在logs下),windows中没有.catalina.out文件主要记录system.out  system.err等  ...