欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

java搭建一个Socket服务器响应多用户访问

时间:2021-02-21 14:55:27|栏目:JAVA代码|点击:

当我们搭建了一个Socket服务端,是需要去响应多用户的访问的。此时,我们就要使用多线程,为每个访问的用户建立一个线程来响应该用户的访问。

具体实现,看如下代码:

package com.sun.socket; 
import Java.io.IOException; 
import java.NET.*; 
import java.io.*; 
import java.util.*;

/** 
* Description: 
* 搭建一个Socket服务器响应多用户访问 
* @author Lee 
* */ 
public class ServerSocketDemo { 
ArrayList MSG = new ArrayList<>(); 
ArrayList RES = new ArrayList<>();

/**
 * Description:
 * 初始化数据
 * */
public void init(){
  MSG.add("hellow");
  RES.add("hi");
}

/**
 * Description:
 * 搭建一个Socket服务器响应多个用户访问
 * */
public void test1(){
  init();
  ServerSocket server = null;

  try{
    //以指定端口搭建一个Socket服务端
    server = new ServerSocket(12000);  

    //等待客户端Socket实例,并创建一个线程去响应该客户单实例
    while(true){
      new Response(server.accept()).start();;
    }

  }catch(IOException e){
    e.printStackTrace();
  }finally{
    try{
      server.close();
    }catch(IOException e){
      e.printStackTrace();
    }

  }
}

/**
 * Description:
 * 根据用户输入的内容,返回相应的内容
 * 
 * @param msg 客户端输入的内容
 * @return 返回服务端回复的内容
 * */
public String getMsg(String msg){
  String res = "Are you kidding me?Please speak English.";

  for(int i=1;i<MSG.size();i++){
    if(msg.contains(MSG.get(i))){
      res = RES.get(i);
    }
  }

  return res;
}


public static void main(String[] args) {
  // TODO Auto-generated method stub
  new ServerSocketDemo().test1();
}

/**
 * Description:
 * 响应用户
 * @author Lee
 * */
class Response extends Thread{
  Socket client;

  /**
   * Description:
   * 默认构造器 
   * */
  public Response(){}
  /**
   * Description:
   * 初始化Socket
   * */
  public Response(Socket client){
    this.client = client;
  }

  @Override
  public void run(){
    Scanner input = null;
    PrintWriter output = null;

    try{
      //获取用户端的输入和输出流
      input = new Scanner(client.getInputStream());
      output = new PrintWriter(client.getOutputStream());

      output.println("欢迎访问!");
      output.flush();

      //等待客户端的输入
      String content = null;
      while(input.hasNext()){
        content = input.nextLine();

        //根据用户端的输入,做出相应的反应
        if(content.equalsIgnoreCase("quit")){
          break;
        }else{
          output.println(getMsg(content));
          output.flush();
        }
      }

    }catch(IOException e){
      e.printStackTrace();
    }finally{
      //关闭资源
      input.close();
      output.close();
    }


  }
}
}

1、我们可以写一个小小测试工具类,来测试一下public String getMsg(String msg)方法。

对该类右键,选择new新建一个JUnit Test Case 。

package com.sun.socket;
import org.junit.Assert;
import org.junit.Test;
public class ServerSocketDemoTest {
  @Test
  public void testGetMsg() {
    try{
      //调用该方法,并与其目标值进行对比。
      String msg = new ServerSocketDemo().getMsg("在吗");
      Assert.assertEquals("gun!", msg);

    }catch(Exception e){
      e.printStackTrace();
    }
  }

}

2、使用apche JMeter工具对该服务端进行压力测试

(1)打开Apache JMeter,右键测试计划->添加->Threads(Users)->Setup Thread Group

这里写图片描述 

(2)设置线程属性(线程数,循环次等)

这里写图片描述

(3)右键添加->simpler->HTTP请求

这里写图片描述 

(4)设置属性,点击运行就可以进行压力测试了。

这里写图片描述

上一篇:JMETER用户变量作用域测试流程

栏    目:JAVA代码

下一篇:Java加密 消息摘要算法MAC实现详解

本文标题:java搭建一个Socket服务器响应多用户访问

本文地址:http://www.codeinn.net/misctech/67142.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有