- 浏览: 636170 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (314)
- 生活 (2)
- c# (37)
- 技术 (3)
- 400电话 (0)
- 400常见问题 (0)
- 400资费 (0)
- html (7)
- css (0)
- 数据库 (7)
- javascript (16)
- php (33)
- asp.net mvc2 (10)
- mysql (9)
- C# 3.0 LinQ (10)
- vs2005或vs2008 (4)
- flash and as3 (7)
- fms (1)
- dedeCMS (11)
- java (33)
- j2me (1)
- swing (1)
- c++ (1)
- jquery easyui (3)
- jquery (5)
- android (29)
- MongoDB (9)
- VtigerCRM (1)
- test (0)
- linux (30)
- nutch (2)
- SqlServer数据库 (2)
- 数据检索 (2)
- java抓取 (11)
- 乐天 (1)
- 淘宝 (1)
- Silverlight4.0 (6)
- sphinx实时索引 (5)
- ecshop (9)
- codeigniter(CI) (3)
- axure6 (1)
- 京东店铺装修教程 (2)
- xpath (1)
- joomla (2)
- bpm (1)
- Bootstrap (2)
- knockout (4)
- ecstore (4)
- css3 (1)
- 微信 (2)
- dede (0)
- soa_edi (1)
- odoo (0)
- web (1)
最新评论
-
骑着蜗牛超F1:
在ie6下报了个stack overflow at line ...
兼容ie6和ie7 的16进制码流在html中显示为图片代码(base64) -
冰之海洋:
好像少了一句代码吧? FloatingFunc.show(th ...
android 一直在最前面的浮动窗口效果 -
yanzhoupuzhang:
连接有问题!
iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000) -
whatable:
唉,楼主你都没有搞清楚重量级和轻量级。。。。既然引用了SWT, ...
java swing 内置浏览器打开网页显示flash图表-swt Browser应用 -
yy_owen:
我晕啊,你链接的什么内容额,我要的iis,你链接个视频什么意思 ...
iis7.0官方下载 IIS 7.0(微软Web服务器组件IIS 7.0) 官方(windows 2003,XP,2000)
这篇做为学习孙卫琴<<Java网络编程精解>>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求.
1.服务端
package
sterning;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net. * ;
import java.util.concurrent. * ;
public class MultiThreadServer {
private int port = 8821 ;
private ServerSocket serverSocket;
private ExecutorService executorService; // 线程池
private final int POOL_SIZE = 10 ; // 单个CPU线程池大小
public MultiThreadServer() throws IOException {
serverSocket = new ServerSocket(port);
// Runtime的availableProcessor()方法返回当前系统的CPU数目. http://www.my400800.cn
executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * POOL_SIZE);
System.out.println( " 服务器启动 " );
}
public void service() {
while ( true ) {
Socket socket = null ;
try {
// 接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
socket = serverSocket.accept();
executorService.execute( new Handler(socket));
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
new MultiThreadServer().service();
}
}
class Handler implements Runnable {
private Socket socket;
public Handler(Socket socket) {
this .socket = socket;
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true );
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader( new InputStreamReader(socketIn));
}
public String echo(String msg) {
return " echo: " + msg;
}
public void run() {
try {
System.out.println( " New connection accepted " + socket.getInetAddress() + " : " + socket.getPort());
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
String msg = null ;
while ((msg = br.readLine()) != null ) {
System.out.println(msg);
pw.println(echo(msg));
if (msg.equals( " bye " ))
break ;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null )
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net. * ;
import java.util.concurrent. * ;
public class MultiThreadServer {
private int port = 8821 ;
private ServerSocket serverSocket;
private ExecutorService executorService; // 线程池
private final int POOL_SIZE = 10 ; // 单个CPU线程池大小
public MultiThreadServer() throws IOException {
serverSocket = new ServerSocket(port);
// Runtime的availableProcessor()方法返回当前系统的CPU数目. http://www.my400800.cn
executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * POOL_SIZE);
System.out.println( " 服务器启动 " );
}
public void service() {
while ( true ) {
Socket socket = null ;
try {
// 接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
socket = serverSocket.accept();
executorService.execute( new Handler(socket));
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
new MultiThreadServer().service();
}
}
class Handler implements Runnable {
private Socket socket;
public Handler(Socket socket) {
this .socket = socket;
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true );
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader( new InputStreamReader(socketIn));
}
public String echo(String msg) {
return " echo: " + msg;
}
public void run() {
try {
System.out.println( " New connection accepted " + socket.getInetAddress() + " : " + socket.getPort());
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
String msg = null ;
while ((msg = br.readLine()) != null ) {
System.out.println(msg);
pw.println(echo(msg));
if (msg.equals( " bye " ))
break ;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null )
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.客户端
package
sterning;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadClient {
public static void main(String[] args) {
int numTasks = 10 ;
ExecutorService exec = Executors.newCachedThreadPool();
for ( int i = 0 ; i < numTasks; i ++ ) {
exec.execute(createTask(i));
}
}
// 定义一个简单的任务
private static Runnable createTask( final int taskID) {
return new Runnable() {
private Socket socket = null ;
private int port = 8821 ;
public void run() {
System.out.println( " Task " + taskID + " :start " );
try {
socket = new Socket( " localhost " , port);
// 发送关闭命令
OutputStream socketOut = socket.getOutputStream();
socketOut.write( " shutdown\r\n " .getBytes());
// 接收服务器的反馈
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String msg = null ;
while ((msg = br.readLine()) != null )
System.out.println(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
} ;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MultiThreadClient {
public static void main(String[] args) {
int numTasks = 10 ;
ExecutorService exec = Executors.newCachedThreadPool();
for ( int i = 0 ; i < numTasks; i ++ ) {
exec.execute(createTask(i));
}
}
// 定义一个简单的任务
private static Runnable createTask( final int taskID) {
return new Runnable() {
private Socket socket = null ;
private int port = 8821 ;
public void run() {
System.out.println( " Task " + taskID + " :start " );
try {
socket = new Socket( " localhost " , port);
// 发送关闭命令
OutputStream socketOut = socket.getOutputStream();
socketOut.write( " shutdown\r\n " .getBytes());
// 接收服务器的反馈
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String msg = null ;
while ((msg = br.readLine()) != null )
System.out.println(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
} ;
}
}
从而实现了多个客户端向服务器端发送请求,服务器端采用多线程的方式来处理的情况
发表评论
-
Java 线程中的Join、wait、notify,sleep
2016-06-22 17:28 4581.wait和notify这两个方法都是Object中的方法 ... -
Java多线程sleep(),join(),interrupt(),wait(),notify()
2016-06-22 17:25 513浅析 Java Thread.join() ... -
Java和C#运行命令行并获取返回值 运行bat文件
2015-08-04 10:45 1336Java运行命令行的例子 import java.io.B ... -
HttpClient的超时用法小记
2012-05-06 08:23 981HttpClient在使用中有两个超时时间,是一直接触 ... -
JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介
2012-05-05 21:29 799在多线程大师Doug Lea的 ... -
XPath 语法 org.dom4j.Document
2012-02-07 13:12 1342XPath 使用路径表达式 ... -
Nutch命令大全
2011-12-28 15:12 1431Nutch采用了一种命令的方式进行工作,其命令可以是对局域网方 ... -
Nutch1.2搜索引擎使用详解
2011-12-27 17:12 1693Nutch作为一款刚刚诞生 ... -
ECLIPSE java.lang.OutOfMemoryError: PermGen space 错误
2011-12-21 15:03 1125ECLIPSE 最近一段时间经常报错,看了日志,有如下错误信息 ... -
nutch环境配置在windows系统上(借助Cygwin)
2011-11-16 11:09 1804nutch环境配置在windows系统上必须要安装【Cygwi ... -
Heritrix 和 Nutch 比较与分析(java开源网络爬虫)
2011-11-15 11:01 7471Heritrix项目介绍 Heritrix工程 ... -
heritrix 下载、安装、配置、以及简单开发
2011-11-04 11:36 1397一、下载: 到www.sourcef ... -
java 如何判断Socket已断开
2011-09-14 13:34 1742最近在开发中遇到一个问题,就是如何判断远端服务器是否已经断开连 ... -
java 程序内存溢出问题查找
2011-04-10 18:00 987这段是时间用java swing做了一个小程序,但是运行一点时 ... -
jtable 隐藏表头标题行
2011-04-08 10:59 3281今天需要把JTable的表头也就是标题行给隐藏掉,在晚上找了一 ... -
java FrameView 启动最大化
2011-03-30 08:49 1538FrameViewzView = new ... -
Swing窗口Linux下不支持最大化问题
2011-03-28 10:15 1007由于最近一直在Linux下工作,今天遇到了Swing窗口不能最 ... -
java 抓取网页内容,可设定代理(HttpURLConnection)
2011-03-11 09:41 1466/* * To change this template, ... -
swing下 改变窗口样式为windows风格(swing控件样式不美观解决方案)
2011-03-02 15:52 2645在windows环境下可以用下面两种方法使窗口显示window ... -
swt Browser 如何打开新url链接地址
2011-02-28 17:27 1714上一篇文章【java swing 内置浏览器打开网页显示fla ...
相关推荐
多线程Java Socket编程示例展示了如何在服务器端利用线程池处理多个并发客户端请求。在这个例子中,`sterning.MultiThreadServer` 类创建了一个监听特定端口(默认为8821)的服务器,并使用`ExecutorService`来管理...
多线程Java Socket编程的关键在于,通过ExecutorService线程池来管理和调度任务,可以有效地应对大量并发的客户端请求。这种方式避免了单线程模型中,一个客户端的阻塞会导致其他客户端无法服务的问题。此外,线程池...
Java 多线程-Socket 编程是指在 Java 语言中使用多线程技术来实现网络编程,特别是使用 Socket 编程来实现客户端和服务器端的通信。在 Java 中,多线程可以使用 Thread 类和 Runnable 接口来实现,而 Socket 编程则...
### 多线程Java_Socket编程示例 #### 背景与意义 在现代软件开发尤其是网络应用领域,多线程技术与Socket编程是两个非常重要的概念和技术。多线程能够有效地利用计算机资源,提高程序运行效率;而Socket编程则是...
综上所述,这个Java Socket编程示例可能会展示如何创建一个简单的客户端和服务器应用程序,同时结合了用户友好的界面。通过阅读和理解示例代码,你可以学习到Java网络编程的基础,包括建立连接、交换数据和管理资源...
Java Socket 编程实现的简单多线程 WEB 服务器 在本文中,我们将详细介绍如何使用 Java 的 Socket 编程实现一个简单的多线程 WEB 服务器。 Socket 编程简介 Socket 编程是 Java 网络编程的基础,它允许开发者创建...
在实际应用中,Java Socket编程通常涉及异常处理、多线程以及数据的序列化与反序列化。例如,服务器端可能需要同时处理多个客户端连接,这时可以使用多线程来并发处理。客户端和服务器之间的数据交换可以采用JSON、...
在本文中,我们将深入探讨Java Socket编程的关键概念、工作原理以及如何创建服务端和客户端,并讨论如何通过多线程支持多个客户端同时在线。 首先,Socket是网络上的两个进程间通信的端点,它允许数据在网络中双向...
在学习和实践多线程和Socket编程时,可以参考"java多线程"、"java Socket的知识"等文档,这些资料通常会涵盖线程的创建、管理、同步和通信,以及Socket的创建、连接、数据传输等基本操作。通过深入理解这些知识点,...
本实例集中,我们关注的是三个关键的Socket编程示例,旨在帮助初学者理解其工作原理和应用。 1. **基础Socket连接** - 客户端(Socket):通过`Socket`类创建一个到指定服务器(IP地址和端口号)的连接。`Socket`...
本资料包含的"Java源码:Socket编程"是一个示例,旨在帮助开发者理解并掌握Java中的Socket编程技术。 首先,Socket编程涉及的主要类有`ServerSocket`和`Socket`。`ServerSocket`类用于创建服务器端的监听套接字,它...
在Java Socket编程中,多线程的应用通常体现在以下两个方面: 1. **服务器端多线程**:当服务器接收到客户端的连接请求时,为了同时处理多个客户端的请求,服务器端可以创建一个新的线程来处理每个连接。这样,...
Socket编程示例代码是关于TCP/IP套接字通信的基础,它可以用于建立两个应用程序之间的双向通信通道。这些示例可能涵盖服务器端(ServerSocket)的创建,客户端(Socket)的连接,数据的读写,以及异常处理。 最后,...
多线程是Java编程中的一个重要概念,允许程序同时执行多个任务。在这个“Java Socket 多线程实例”中,我们将会探讨如何结合这两个关键概念来创建一个聊天服务器和客户端应用。 首先,`ChatServer.java` 文件通常...
Java Socket 多线程通信是网络编程中的一个重要概念,它允许两个或多个应用程序通过TCP/IP进行数据交换。在这个示例中,我们创建了一个双向通信的系统,即双工通信,这意味着数据可以在两个方向上同时传输。这样的...
Java Socket通信是网络编程中的基础概念,主要用于两个应用程序之间的双向通信。在这个"Java_socket 通信示例"中,我们看到的是一个简单的聊天室应用,它利用了Java的Socket API来实现实时的数据交换。以下是对这个...
在提供的部分内容中,我们看到涉及了多线程Java Socket编程的核心实现。MultiThreadServer类代表了一个多线程的服务器端,它使用ExecutorService来管理线程池,接受客户端的Socket连接,并为每个连接分配一个Handler...
总的来说,Java Socket编程涉及到网络通信的基本模型、端口的使用、数据的读写以及多线程处理等核心概念。通过`ServerSocket`和`Socket`类,开发者可以构建出能够处理多个客户端请求的服务器,以及与之交互的客户端...
Socket编程是计算机网络编程中的重要组成部分,特别是在Java中,它为开发者提供了在不同网络设备间交换数据的能力。本文将深入探讨Linux环境下使用Java进行Socket编程的相关知识点。 首先,Socket是网络通信中的一...
书中提供了多个实用的案例,如简单的聊天室应用、文件传输服务等,这些案例不仅展示了Socket编程的基本原理,也涵盖了多线程、非阻塞I/O和安全通信等高级主题。通过动手实践,读者可以将理论知识转化为实际技能,更...