怎么用java代码测试serversocket的最大可连接数

问题描述

怎么用java代码测试serversocket的最大可连接数

不使用JMeter等压力测试软件,怎么使用java代码测试serversocket的最大可连接数?

服务器是利用serversocket,每次接收到一个socket,就提交给线程池,以下是客户端的代码

package Client;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Client {
public static void main(String[] args) {
initFile("test.txt");
initFile("time.txt");
ExecutorService pool = Executors.newFixedThreadPool(1000);
for (int i = 0; i < 3000; i++) {
pool.submit(new Thread() {
@Override
public void run() {
sendSocket();
}
});
}
pool.shutdown();
}

public static void initFile(String fileName) {
    File file = new File(fileName);
    if (file.exists())
        file.delete();
}

public static void sendSocket() {
    Socket socket = null;
    try {
        socket = new Socket("127.0.0.1", 14);
        long startTime = System.currentTimeMillis();
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String string = "";
        String line;
        while ((line = reader.readLine()) != null) {
            string += line;
        }
        string += "rn";
        long endTime = System.currentTimeMillis();
        FileOutputStream fos = new FileOutputStream("test.txt", true);
        fos.write(string.getBytes());
        fos.flush();
        fos.close();
        fos = new FileOutputStream("time.txt", true);
        String time = (endTime - startTime) + "msrn";
        fos.write(time.getBytes());
        fos.flush();
        fos.close();
    } catch (UnknownHostException e) {
        System.out.println("UnknownHostException");
    } catch (IOException e) {
        System.out.println("IOException1");
    } finally {
        if (socket != null)
            try {
                socket.close();
            } catch (IOException e) {
                System.out.println("IOException2");
            }
    }
}

}

发现客户端数量为3000的时候就会打印IOEXCEPTION1,但是服务器那边却没有崩溃。到底该怎么测试最大可连接数呢?

时间: 2024-12-01 03:13:02

怎么用java代码测试serversocket的最大可连接数的相关文章

java代码测试http协议505错误的解决方法

代码功能:通过java代码获取网页源代码: 所用工具:Myclipse8.5+tomcat6.0+浏览器 系统环境:windows xp旗舰版 火狐浏览器版本: IE浏览器版本:

诊断Java代码: 进行记录器测试以正确调用方法

用 JUnit进行单元测试是一个功能强大的方法,它可以确保您的代码基础的完整性,但是一些不变量比其他(方法调用序列是其中一种)更难测试.在诊断Java 代码这一部分,Eric Allen描述了怎样在您的单元测试中使用记录器(一种特殊的侦听器),来确保一个方法调用序列按恰当的顺序发生.请点击文章顶部和底部的 讨论,与作者和其他读者在论坛上分享您关于本文的看法. 随着时间的推移,当系统开发人员,维护人员甚至是系统详细说明改变时,JUnit 框架提供一个很好的方法来改善系统的坚固性.通过测试,您可以检

代码-java ie8测试手机号是否已被注册,输入已注册的,有时提示手机号已被注册,有时直接注册成功

问题描述 java ie8测试手机号是否已被注册,输入已注册的,有时提示手机号已被注册,有时直接注册成功 java ie8测试手机号是否已被注册,输入已注册的,有时提示手机号已被注册,有时直接注册成功,谷歌测试没有问题,请问是代码有问题,还是ie8的问题 解决方案 你看看后台程序吧,和后台人员联调一下 解决方案二: 后台逻辑处理问题,找后台程序人员 解决方案三: 是不是表单重复提交了??输入已注册你这是用ajax来做.实时输入后查询该手机号是否注册?还是直接都提交表彰数据?

使用JUnit来测试Java代码中的异常

使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class. Person.java public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; }

诊断 Java 代码:设计轻松的代码维护

设计 本月,Eric Allen 解释了在使代码更易于维护的同时,避免和控制无理由的变化怎么会是保持代码健壮性的关键.他集中讨论了诸如函数样式代码编写之类的概念,以及标记字段.方法和类的方法来处理并防止可变性.Eric 还解释了本任务中单元测试和重构的角色,并提供了协助实现重构的两个工具.在相关论坛中与作者和其他读者分享您对本文的看法.(您也可以单击本文顶部或底部的"讨论",访问该论坛.)有效调试源自良好的编程.设计易于维护的程序是程序员面临的最困难挑战之一,其部分原因在于程序通常并不

诊断Java代码

诊断Java代码: Broken Dispatch错误模式 诊断Java代码: Double Descent错误模式 诊断Java代码: Impostor Type错误模式 诊断Java代码: Java编程中的断言和时态逻辑 诊断Java代码: Liar View错误模式 诊断Java代码: Repl提供交互式评价 诊断Java代码: 单元测试与自动化代码分析协同工作 诊断Java代码: 将时态逻辑用于错误模式 诊断Java代码: 进行记录器测试以正确调用方法 诊断Java代码: 空标志错误模式

XML到Java代码的数据绑定之对象

xml|对象|数据 在这个由四部分组成的系列文章的第一部分,我们将弄清什么是数据绑定,与在 Java 应用程序中处理 XML 数据的其它方法相比它有什么优势,以及如何开始使用它.这一部分将考查为什么使用数据绑定,以及如何为各种约束建立模型,使 XML 文档能转换成 Java 对象.同时还涵盖用于生成数据绑定类的输入和输出. 您希望在您的 Java 应用程序中使用 XML 吗?那么好,同成千上万的其他人一起上这条船吧.当您深入了解 XML 以后,也许您会发现 DOM 和 SAX API(请参阅参考

提高 Java 代码的性能

性能 尾递归转换能加快应用程序的速度,但不是所有的 JVM 都会做这种转换 很多算法用尾递归方法表示会显得格外简明.编译器会自动把这种方法转换成循环,以提高程序的性能.但在 Java 语言规范中,并没有要求一定要作这种转换,因此,并不是所有的 Java 虚拟机(JVM)都会做这种转换.这就意味着在 Java 语言中采用尾递归表示可能导致巨大的内存占用,而这并不是我们期望的结果.Eric Allen 在本文中阐述了动态编译将会保持语言的语义,而静态编译则通常不会.他说明了为什么这是一个重要问题,并

JAVA代码编写的30条建议

JAVA代码编写的30条建议 (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如: ThisIsAClassName thisIsMethodOrFieldName 若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母.这样便可标志出它们属于编译期的常数. Java包(Package)属于一种特殊情况:它们全都是小写字母,即便中间的单词亦是如此.对于域名扩展名称