当前位置: 首页 > 编程笔记 >

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

戚均
2023-03-14
本文向大家介绍java搭建一个Socket服务器响应多用户访问,包括了java搭建一个Socket服务器响应多用户访问的使用技巧和注意事项,需要的朋友参考一下

当我们搭建了一个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编程服务器响应客户端实例代码,包括了Java Socket编程服务器响应客户端实例代码的使用技巧和注意事项,需要的朋友参考一下 通过输入流来读取客户端信息,相应的时候通过输出流来实现。 服务端类的代码: 客户端类的代码: 先运行服务器端类,之后再运行客户端类: 服务器端类输出结果: 客户端类的输出结果: 总结 以上就是本文关于Java Socket编程服务器响应

  • 问题内容: 我尝试使用以下代码从服务器到客户端发送文件和目录列表。服务器正在从客户端接收消息,但我不知道服务器是否没有发送回结果或客户端是否不接受结果。 服务器端: 问题答案: 据我所见,您在客户端上做的同时在服务器上做。从服务器发送的字符串中没有行尾字符,因此客户端将永远无法完成。执行outqw.println()或添加到要发送的内容的末尾。话虽这么说,很难用一堆注释掉的东西来浏览未格式化的代码

  • 本文向大家介绍3分钟用Docker搭建一个Minecraft服务器,包括了3分钟用Docker搭建一个Minecraft服务器的使用技巧和注意事项,需要的朋友参考一下 1 写在前面的话 作为一名资深游戏玩家,初次接触Minecraft(我的世界)时我是拒绝的,但玩了一段时间之后便欲罢不能。Minecraft(以下简称MC)作为一款沙盒类游戏,具有极高的自由度,想玩什么完全取决于你。你可以进行传统的

  • 我构建了一个基于文件下载器RMI客户端-服务器的应用程序。在这方面,我不了解不同客户端的工作。文件位于服务器端,RMI在其一侧有等效的代理服务器(称为存根)。我为这个应用程序使用了10个客户端和1个服务器。 问题1-我的问题是当多个客户端在从注册表查找后同时进行RMI调用时,客户端以什么顺序为他们播种/提供文件?意味着底层服务算法---? 我无法理解这一点,当我执行代码时,我只看到相应的文件正在同

  • 上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费。 这时我们就需要自己搭建一台Git服务器作为私有仓库使用。 接下来我们将以 Centos 为例搭建 Git 服务器。 1、安装Git $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-

  • 本文向大家介绍FTP服务器搭建之本地用户篇,包括了FTP服务器搭建之本地用户篇的使用技巧和注意事项,需要的朋友参考一下 Vsftpd3.0--FTP服务器搭建之本地用户篇,具体内容如下 FTP服务在工作中是经用到的一种工具,可以实现上传下载等功能。那么今天我们来聊一聊FTP服务器使用本地用户登录的实现模式。 既然是本地用户,就少不了要创建本地用户,下面我们创建2个用户: 第一步:创建用户 第一次创