import java.io.*;
import java.net.*;
import java.util.concurrent.*;
public class MainServer {
private final ServerSocket serverSocket;
private final ExecutorService pool;
public MainServer(int port, int clientCount) throws IOException {
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(clientCount);
}
public void serve() {
try {
while (true) {
pool.execute(new Handler(serverSocket.accept()));
}
} catch (IOException ex) {
pool.shutdown();
}
}
class Handler implements Runnable {
private final Socket socket;
Handler(Socket socket) {
this.socket = socket;
}
public void run() {
// read and service request
BufferedReader in=null;
PrintWriter out=null;
try
{
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
while(true)
{
String str=in.readLine();
if(!str.equals(null))
System.out.println(str);
Thread.currentThread().sleep(2000);
}
}catch(Exception e)
{
System.out.println(e.toString());
}
}
}
public static void main(String aa[])
{
try
{
new MainServer(444, 65535).serve();
}catch(Exception e)
{
System.out.println(e.toString());
}
}
}
Client端:
package test.bwl;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 9991);
//向服务器端第一次发送字符串
OutputStream netOut = socket.getOutputStream();
DataOutputStream doc = new DataOutputStream(netOut);
DataInputStream in = new DataInputStream(socket.getInputStream());
//向服务器端第二次发送字符串
doc.writeUTF("list");
String res = in.readUTF();
System.out.println(res);
doc.writeUTF("bye");
res = in.readUTF();
System.out.println(res);
doc.close();
in.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
}
}
}
}
}
分享到:
相关推荐
jkd1_5~1_7之新特性总结 - QQ350884961的专栏 - 博客频道 - CSDN_NET
11. **内存模型的增强**:JDK 1.5对Java内存模型(JMM)进行了改进,确保了多线程环境下的正确性,例如volatile关键字的增强。 **安装JDK 1.5 for Windows**: 1. 下载`jdk-1_5_0_21-windows-i586-p.exe`安装文件...
Java从JDK 1.5版本开始引入了线程池,使得开发者不再需要手动创建和销毁线程,而是通过线程池来管理和复用线程。 1. **什么是线程池?** 线程池是预先创建并维护的一组线程集合。这些线程在需要时被分配给任务执行...
若需配置多实例,可以在Jetty的`start.d`目录下创建新的配置文件,如`jetty-instance1.ini`,并在其中指定不同的端口和上下文路径。启动时,通过`bin/jetty.sh instance=jetty-instance1`(Linux/Mac)或`bin/jetty....
【标题】"jkd7,8,10" 指的是Java开发工具包(Java Development Kit)的三个主要版本:JDK 7、JDK 8和JDK 10。这些版本在Java编程领域中具有重要意义,因为它们包含了运行和开发Java应用程序所需的所有组件,包括Java...
它与 `CATALINA_HOME` 类似,但通常用于指定单个 Tomcat 实例的根目录,特别是在同一台机器上安装了多个 Tomcat 实例的情况下。 - **CATALINA_HOME**: - 变量名:CATALINA_HOME - 变量值:C:\ProgramFiles\...
到处找jdk的资源,发现官方网站要注册登录,即使注册了也无法登录下载,无奈自己下载了可以资源,分享出来,下载速度很快,百度云 Linux jkd1.7多版本下载,
JDK1.5_u22_linux_64bit_rpm 该资源分两部分,下载到同一目录解压后,为"jdk-1_5_0_22-linux-amd64-rpm.bin" 使用方法: 1.使用二进制方式上传到安装环境 2.使用"chmod +x jdk-1_5_0_22-linux-amd64-rpm.bin"赋权限,...
通过Lambda,开发者可以以更少的代码实现多线程、事件处理等功能,提高代码的可读性和可维护性。 2. **Stream API**:Stream API是Java集合框架的重大扩展,提供了对数据进行操作的新方式,如过滤、映射、聚合等。...
【标题】"jkd7.tgz" 是一个针对Linux 64位操作系统的Java Development Kit (JDK) 7版本的压缩包文件。这个文件名表明它包含了在Linux 64位环境下运行和开发Java应用程序所需的核心组件。 【描述】中提到的"liunx-64...
- **改进的类型推断**:编译器能够更好地推断泛型类型的实例化,减少了冗余的类型声明。 **2. JDK 8的安装与配置** - 下载:可以从Oracle官网下载JDK 8的64位版本,如"第8版本sdk.exe"。 - 安装:执行下载的安装...
满足大家的需求,我在网到了 中文版的java 1.6 API
### JDK环境变量设置详解 #### 一、引言 对于Java初学者而言,正确地配置JDK环境变量是学习过程中非常关键的一步。本文将详细阐述如何在Windows 7操作系统上进行JDK环境变量的设置,并确保后续可以顺利运行Java...
4. 多线程:Java内置了强大的多线程支持,允许开发者创建并发执行的任务,提高程序效率。 5. 核心API:如Math类提供了各种数学运算,Date和Calendar类用于日期和时间操作,String和StringBuilder类用于字符串处理。...
jkd 1.8 中文 帮助文档 必应翻译 开发必备神器 (注意: 首次打开文档前,务必按如下操作进行设置: 1-右键文档, 2-点击'属性' ,3-在属性栏中点击'解除锁定',4- 确定 ) 非常好用,建议配合英文原版进行查看,效果更佳.
标题中的"JKD1.6 64位 32位 jdk6"表明这是一份包含JDK1.6的64位和32位版本的下载包。64位和32位指的是JDK与操作系统平台的兼容性。64位JDK在处理大量数据和内存密集型应用时表现出更好的性能,因为它可以利用更大...
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等
1. **立体攻击**:JKD强调全方位、多角度的攻击策略,不仅使用拳击中的各种拳法,还充分利用肘、膝和腿脚进行攻击。短程武器如肘膝力量大、速度快、动作狠,适合近战;长程武器如拳腿则能在中远距离发挥威力。攻击...
Java JDK 1.8.0引入了多个关键特性,其中最引人注目的便是Lambda表达式。Lambda表达式是函数式编程的关键元素,它允许开发者以简洁的方式定义匿名函数,使得代码更加紧凑、可读性更强。Lambda表达式在处理集合数据时...