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

发布时间 - 2026-01-10 23:01:58    点击率:

当我们搭建了一个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)设置属性,点击运行就可以进行压力测试了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java搭建socket服务器  # socket  # 服务器  # 多用户  # java  # socket多用户  # JavaWeb响应下载功能实例代码(包含工具类)  # java中添加按钮并添加响应事件的方法(推荐)  # javaweb如何实现请求和响应  # Java中HttpServletResponse响应中文出现乱码问题  # Java Web请求与响应实例详解  # java常见事件响应方法实例汇总  # javasciprt下jquery函数$.post执行无响应的解决方法  # JAVA发送HTTP请求  # 返回HTTP响应内容  # 应用及实例代码  # JavaWeb Refresh响应头代码实例详解  # 右键  # 服务端  # 客户端  # 压力测试  # 多个  # 我们可以  # 当我们  # 欢迎访问  # 并与  # 建立一个  # 该用户  # 一个小小  # 创建一个  # 多线程  # 大家多多  # 就可以  # 新建一个  # 测试一下  # 测试工具 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  深入理解Android中的xmlns:tools属性  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  MySQL查询结果复制到新表的方法(更新、插入)  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  在Oracle关闭情况下如何修改spfile的参数  如何基于云服务器快速搭建网站及云盘系统?  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Linux系统命令中tree命令详解  大连 网站制作,大连天途有线官网?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  JavaScript如何实现继承_有哪些常用方法  Laravel如何使用Service Container和依赖注入?(代码示例)  如何实现javascript表单验证_正则表达式有哪些实用技巧  如何快速生成高效建站系统源代码?  如何为不同团队 ID 动态生成多个“认领值班”按钮  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  JavaScript Ajax实现异步通信  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Python数据仓库与ETL构建实战_Airflow调度流程详解  网站制作报价单模板图片,小松挖机官方网站报价?  香港网站服务器数量如何影响SEO优化效果?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何用狗爹虚拟主机快速搭建网站?  JS经典正则表达式笔试题汇总  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  怎么用AI帮你为初创公司进行市场定位分析?  Laravel如何记录自定义日志?(Log频道配置)  如何获取免费开源的自助建站系统源码?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  微信小程序 配置文件详细介绍  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  制作公司内部网站有哪些,内网如何建网站?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  如何快速搭建高效WAP手机网站吸引移动用户?  大连网站制作公司哪家好一点,大连买房网站哪个好?  Laravel如何使用Livewire构建动态组件?(入门代码)  装修招标网站设计制作流程,装修招标流程?  高端企业智能建站程序:SEO优化与响应式模板定制开发  英语简历制作免费网站推荐,如何将简历翻译成英文?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程