当我们搭建了一个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个用户: 第一步:创建用户 第一次创