- 浏览: 822135 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
多线程Java Socket编程示例
这篇做为学习孙卫琴<>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求.
1.服务端
1. package sterning;
2.
3. import java.io.BufferedReader;
4. import java.io.IOException;
5. import java.io.InputStream;
6. import java.io.InputStreamReader;
7. import java.io.OutputStream;
8. import java.io.PrintWriter;
9. import java.net.*;
10. import java.util.concurrent.*;
11.
12. public class MultiThreadServer {
13. private int port=8821;
14. private ServerSocket serverSocket;
15. private ExecutorService executorService;//线程池
16. private final int POOL_SIZE=10;//单个CPU线程池大小
17.
18. public MultiThreadServer() throws IOException{
19. serverSocket=new ServerSocket(port);
20. //Runtime的availableProcessor()方法返回当前系统的CPU数目.
21. executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
22. System.out.println("服务器启动");
23. }
24.
25. public void service(){
26. while(true){
27. Socket socket=null;
28. try {
29. //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
30. socket=serverSocket.accept();
31. executorService.execute(new Handler(socket));
32.
33. } catch (Exception e) {
34. e.printStackTrace();
35. }
36. }
37. }
38.
39. public static void main(String[] args) throws IOException {
40. new MultiThreadServer().service();
41. }
42.
43. }
44.
45. class Handler implements Runnable{
46. private Socket socket;
47. public Handler(Socket socket){
48. this.socket=socket;
49. }
50. private PrintWriter getWriter(Socket socket) throws IOException{
51. OutputStream socketOut=socket.getOutputStream();
52. return new PrintWriter(socketOut,true);
53. }
54. private BufferedReader getReader(Socket socket) throws IOException{
55. InputStream socketIn=socket.getInputStream();
56. return new BufferedReader(new InputStreamReader(socketIn));
57. }
58. public String echo(String msg){
59. return "echo:"+msg;
60. }
61. public void run(){
62. try {
63. System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
64. BufferedReader br=getReader(socket);
65. PrintWriter pw=getWriter(socket);
66. String msg=null;
67. while((msg=br.readLine())!=null){
68. System.out.println(msg);
69. pw.println(echo(msg));
70. if(msg.equals("bye"))
71. break;
72. }
73. } catch (IOException e) {
74. e.printStackTrace();
75. }finally{
76. try {
77. if(socket!=null)
78. socket.close();
79. } catch (IOException e) {
80. e.printStackTrace();
81. }
82. }
83. }
84. }
2.客户端
1. package sterning;
2.
3. import java.io.BufferedReader;
4. import java.io.IOException;
5. import java.io.InputStreamReader;
6. import java.io.OutputStream;
7. import java.net.Socket;
8. import java.util.concurrent.ExecutorService;
9. import java.util.concurrent.Executors;
10.
11. public class MultiThreadClient {
12.
13. public static void main(String[] args) {
14. int numTasks = 10;
15.
16. ExecutorService exec = Executors.newCachedThreadPool();
17.
18. for (int i = 0; i < numTasks; i++) {
19. exec.execute(createTask(i));
20. }
21.
22. }
23.
24. // 定义一个简单的任务
25. private static Runnable createTask(final int taskID) {
26. return new Runnable() {
27. private Socket socket = null;
28. private int port=8821;
29.
30. public void run() {
31. System.out.println("Task " + taskID + ":start");
32. try {
33. socket = new Socket("localhost", port);
34. // 发送关闭命令
35. OutputStream socketOut = socket.getOutputStream();
36. socketOut.write("shutdown\r\n".getBytes());
37.
38. // 接收服务器的反馈
39. BufferedReader br = new BufferedReader(
40. new InputStreamReader(socket.getInputStream()));
41. String msg = null;
42. while ((msg = br.readLine()) != null)
43. System.out.println(msg);
44. } catch (IOException e) {
45. e.printStackTrace();
46. }
47. }
48.
49. };
50. }
51. }
这篇做为学习孙卫琴<>的学习笔记吧.其中采用Java 5的ExecutorService来进行线程池的方式实现多线程,模拟客户端多用户向同一服务器端发送请求.
1.服务端
1. package sterning;
2.
3. import java.io.BufferedReader;
4. import java.io.IOException;
5. import java.io.InputStream;
6. import java.io.InputStreamReader;
7. import java.io.OutputStream;
8. import java.io.PrintWriter;
9. import java.net.*;
10. import java.util.concurrent.*;
11.
12. public class MultiThreadServer {
13. private int port=8821;
14. private ServerSocket serverSocket;
15. private ExecutorService executorService;//线程池
16. private final int POOL_SIZE=10;//单个CPU线程池大小
17.
18. public MultiThreadServer() throws IOException{
19. serverSocket=new ServerSocket(port);
20. //Runtime的availableProcessor()方法返回当前系统的CPU数目.
21. executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
22. System.out.println("服务器启动");
23. }
24.
25. public void service(){
26. while(true){
27. Socket socket=null;
28. try {
29. //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
30. socket=serverSocket.accept();
31. executorService.execute(new Handler(socket));
32.
33. } catch (Exception e) {
34. e.printStackTrace();
35. }
36. }
37. }
38.
39. public static void main(String[] args) throws IOException {
40. new MultiThreadServer().service();
41. }
42.
43. }
44.
45. class Handler implements Runnable{
46. private Socket socket;
47. public Handler(Socket socket){
48. this.socket=socket;
49. }
50. private PrintWriter getWriter(Socket socket) throws IOException{
51. OutputStream socketOut=socket.getOutputStream();
52. return new PrintWriter(socketOut,true);
53. }
54. private BufferedReader getReader(Socket socket) throws IOException{
55. InputStream socketIn=socket.getInputStream();
56. return new BufferedReader(new InputStreamReader(socketIn));
57. }
58. public String echo(String msg){
59. return "echo:"+msg;
60. }
61. public void run(){
62. try {
63. System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort());
64. BufferedReader br=getReader(socket);
65. PrintWriter pw=getWriter(socket);
66. String msg=null;
67. while((msg=br.readLine())!=null){
68. System.out.println(msg);
69. pw.println(echo(msg));
70. if(msg.equals("bye"))
71. break;
72. }
73. } catch (IOException e) {
74. e.printStackTrace();
75. }finally{
76. try {
77. if(socket!=null)
78. socket.close();
79. } catch (IOException e) {
80. e.printStackTrace();
81. }
82. }
83. }
84. }
2.客户端
1. package sterning;
2.
3. import java.io.BufferedReader;
4. import java.io.IOException;
5. import java.io.InputStreamReader;
6. import java.io.OutputStream;
7. import java.net.Socket;
8. import java.util.concurrent.ExecutorService;
9. import java.util.concurrent.Executors;
10.
11. public class MultiThreadClient {
12.
13. public static void main(String[] args) {
14. int numTasks = 10;
15.
16. ExecutorService exec = Executors.newCachedThreadPool();
17.
18. for (int i = 0; i < numTasks; i++) {
19. exec.execute(createTask(i));
20. }
21.
22. }
23.
24. // 定义一个简单的任务
25. private static Runnable createTask(final int taskID) {
26. return new Runnable() {
27. private Socket socket = null;
28. private int port=8821;
29.
30. public void run() {
31. System.out.println("Task " + taskID + ":start");
32. try {
33. socket = new Socket("localhost", port);
34. // 发送关闭命令
35. OutputStream socketOut = socket.getOutputStream();
36. socketOut.write("shutdown\r\n".getBytes());
37.
38. // 接收服务器的反馈
39. BufferedReader br = new BufferedReader(
40. new InputStreamReader(socket.getInputStream()));
41. String msg = null;
42. while ((msg = br.readLine()) != null)
43. System.out.println(msg);
44. } catch (IOException e) {
45. e.printStackTrace();
46. }
47. }
48.
49. };
50. }
51. }
发表评论
-
Java多线程-----Socket通信
2010-08-18 17:54 1626Java多线程-----Socket通信 程序分Server ... -
Java Socket 编程——多线程网络聊天程序
2010-08-18 17:52 2297Java Socket 编程——多线 ... -
java Socket多线程服务器源代码介绍
2010-08-18 17:49 2112java Socket多线程服务器源代码介绍 ... -
java:多线程与Socket结合的简单示例
2010-08-18 17:47 1236java:多线程与Socket结合 ... -
Java与Socket
2010-08-18 17:44 914Java基于Socket文件传输 ...
相关推荐
在Linux操作系统中,多线程编程与网络通信的结合是一个重要的技术领域,特别是在服务器开发中。...对于初学者来说,这是一个很好的起点,通过动手实践,逐步掌握Linux多线程Socket编程的核心技巧。
在实际开发中,使用Python、Java、C++等编程语言都可以实现Socket和多线程的结合。例如,Python的socket模块提供了创建和操作Socket的函数,而threading模块则支持多线程编程。对于初学者来说,这个例子提供了一个很...
在Python编程中,多线程和Socket通信是两个重要的概念,它们经常被结合使用以实现高效、并发的网络服务。本篇文章将详细讲解如何在Python中编写一个多线程的Socket程序...这将帮助你掌握Python的多线程Socket编程技术。
1. `server.py`: 服务器端的代码,包含Socket的创建、绑定、监听和接受连接,以及使用多线程处理客户端请求的部分。 2. `client.py`: 客户端的代码,包含Socket的创建、连接以及发送和接收数据的功能。 3. `config....
Socket编程和多线程是计算机网络编程中的两个关键概念,特别是在服务器端开发中。这篇文章将深入探讨这两个主题,以及它们如何结合在一起。 首先,我们来理解什么是Socket。Socket是网络通信的基本单元,可以看作是...
Python中的多线程和Socket库可以结合使用来实现高效的端口扫描功能。端口扫描是网络安全和系统管理员常用的工具,用于检测远程或本地主机开放的网络端口,从而了解网络服务的状态。 首先,我们来看看如何在Python中...
9. **性能优化**:在多线程Socket编程中,需要注意线程池的使用,以控制并发数量,防止过多线程导致系统资源耗尽。 10. **测试与调试**:编写完多线程Socket程序后,需要进行充分的测试,包括并发连接测试、数据...
在Python编程中,Socket是网络通信的基础,它允许程序通过网络发送和接收...在"多线程.py"、"Server.py"和"Client.py"这些文件中,你将看到如何将这些概念付诸实践,从而更好地理解和掌握Python的Socket和多线程编程。
"多线程Socket阻塞模式下通信的例子.rar"可能包含如何在Java或C#中实现多线程处理Socket通信的代码。 6. **Socket应用实例**: - "socket应用小例程.rar"和"Socket开发资料.rar"可能包含了各种Socket编程的实用...
学习这个例子,你可以深入理解如何在Delphi 7中结合Socket和多线程技术来构建高效、稳定的网络应用。这不仅可以提高程序性能,而且对于处理大量并发连接的服务器端应用程序来说,是非常必要的。因此,熟练掌握Delphi...
总结来说,Python中的多线程和多进程结合非阻塞Socket技术,能有效地提高网络服务的并发处理能力。服务端通过多线程接收连接请求,利用非阻塞Socket避免等待数据的阻塞,同时子进程处理接收到的数据。客户端则可以...
在Java编程领域,多线程和Socket通信是两个重要的概念,...总之,这个基于Java的多线程Socket聊天室源代码是学习网络编程和并发处理的好例子,它展示了如何使用Java的基本工具来创建一个基本但功能完整的网络应用程序。
在实际的网络应用中,线程和Socket常常结合使用。例如,服务器端可能为每个新到来的连接创建一个新的线程来处理,以提高服务的并发能力。`socket2`文件可能就是这样一种情况,展示了如何在一个服务器端线程中处理多...
Java多线程Socket实现是网络编程中的重要概念,它结合了Java的并发处理能力和Socket通信技术,用于构建高效、可扩展的网络应用。Socket在计算机网络中起到桥梁的作用,允许两个远程应用程序通过TCP/IP进行数据交换。...
这个小例子不仅展示了Socket编程的基本原理,还涉及到多线程和大数据处理的关键技术。通过这个实例,开发者可以深入理解如何在实际应用中结合这些技术,有效地处理和存储大数据。在开发过程中,还需要关注性能优化、...
在IT行业中,网络通信是软件开发的一...通过深入理解以上知识点,并实践这个“C# socket多线程通讯 含客户端”的例子,开发者能够熟练掌握C#中的Socket通信和多线程技术,为构建高效、稳定的网络应用程序打下坚实基础。
这些小型程序,如命令解释器、ping和客户端服务器示例,都是多线程和套接字编程实践的好例子。通过分析和学习这些代码,初学者可以更好地理解这两个主题,并掌握实际编程技巧。临界区的软件实现也是多线程编程中的一...
7. **多线程处理**: - 当服务器需要同时处理多个客户端连接时,通常需要为每个连接创建一个新的线程。这样,服务器可以在处理一个客户端的同时接受其他客户端的连接请求。 8. **示例代码**: - 一个简单的服务器...
本篇文章将深入探讨如何在C#中结合Socket和多线程实现高效的网络通信。 首先,让我们理解Socket的基本概念。Socket是一种进程间通信机制,它是基于TCP/IP协议的,用于在网络中的两台计算机之间建立连接并交换数据。...