`
kidiaoer
  • 浏览: 822135 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

多线程和Socket结合使用的例子

阅读更多
多线程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. }  

分享到:
评论

相关推荐

    linux下多线程读写socket的简单例子

    在Linux操作系统中,多线程编程与网络通信的结合是一个重要的技术领域,特别是在服务器开发中。...对于初学者来说,这是一个很好的起点,通过动手实践,逐步掌握Linux多线程Socket编程的核心技巧。

    SOCKET+多线程例子

    在实际开发中,使用Python、Java、C++等编程语言都可以实现Socket和多线程的结合。例如,Python的socket模块提供了创建和操作Socket的函数,而threading模块则支持多线程编程。对于初学者来说,这个例子提供了一个很...

    Python多线程Socket程序例子

    在Python编程中,多线程和Socket通信是两个重要的概念,它们经常被结合使用以实现高效、并发的网络服务。本篇文章将详细讲解如何在Python中编写一个多线程的Socket程序...这将帮助你掌握Python的多线程Socket编程技术。

    Socket通讯与多线程处理-完整实例

    1. `server.py`: 服务器端的代码,包含Socket的创建、绑定、监听和接受连接,以及使用多线程处理客户端请求的部分。 2. `client.py`: 客户端的代码,包含Socket的创建、连接以及发送和接收数据的功能。 3. `config....

    socket 多线程 的 例子

    Socket编程和多线程是计算机网络编程中的两个关键概念,特别是在服务器端开发中。这篇文章将深入探讨这两个主题,以及它们如何结合在一起。 首先,我们来理解什么是Socket。Socket是网络通信的基本单元,可以看作是...

    python使用多线程+socket实现端口扫描

    Python中的多线程和Socket库可以结合使用来实现高效的端口扫描功能。端口扫描是网络安全和系统管理员常用的工具,用于检测远程或本地主机开放的网络端口,从而了解网络服务的状态。 首先,我们来看看如何在Python中...

    socket 多线程 练习的例子

    9. **性能优化**:在多线程Socket编程中,需要注意线程池的使用,以控制并发数量,防止过多线程导致系统资源耗尽。 10. **测试与调试**:编写完多线程Socket程序后,需要进行充分的测试,包括并发连接测试、数据...

    Python的Socket连接例子(包含多线程例子)

    在Python编程中,Socket是网络通信的基础,它允许程序通过网络发送和接收...在"多线程.py"、"Server.py"和"Client.py"这些文件中,你将看到如何将这些概念付诸实践,从而更好地理解和掌握Python的Socket和多线程编程。

    网上收集的多个Socket编程经典例子源码

    "多线程Socket阻塞模式下通信的例子.rar"可能包含如何在Java或C#中实现多线程处理Socket通信的代码。 6. **Socket应用实例**: - "socket应用小例程.rar"和"Socket开发资料.rar"可能包含了各种Socket编程的实用...

    delphi7 socket多线程

    学习这个例子,你可以深入理解如何在Delphi 7中结合Socket和多线程技术来构建高效、稳定的网络应用。这不仅可以提高程序性能,而且对于处理大量并发连接的服务器端应用程序来说,是非常必要的。因此,熟练掌握Delphi...

    python多线程非阻塞socket

    总结来说,Python中的多线程和多进程结合非阻塞Socket技术,能有效地提高网络服务的并发处理能力。服务端通过多线程接收连接请求,利用非阻塞Socket避免等待数据的阻塞,同时子进程处理接收到的数据。客户端则可以...

    java多线程基于socket的简易聊天室源代码

    在Java编程领域,多线程和Socket通信是两个重要的概念,...总之,这个基于Java的多线程Socket聊天室源代码是学习网络编程和并发处理的好例子,它展示了如何使用Java的基本工具来创建一个基本但功能完整的网络应用程序。

    线程与socket例子.rar_java_layersnut_socket

    在实际的网络应用中,线程和Socket常常结合使用。例如,服务器端可能为每个新到来的连接创建一个新的线程来处理,以提高服务的并发能力。`socket2`文件可能就是这样一种情况,展示了如何在一个服务器端线程中处理多...

    java多线程Socket简单实现

    Java多线程Socket实现是网络编程中的重要概念,它结合了Java的并发处理能力和Socket通信技术,用于构建高效、可扩展的网络应用。Socket在计算机网络中起到桥梁的作用,允许两个远程应用程序通过TCP/IP进行数据交换。...

    socket 大数据并列接收存数据库小列子(带多线程模拟数据)

    这个小例子不仅展示了Socket编程的基本原理,还涉及到多线程和大数据处理的关键技术。通过这个实例,开发者可以深入理解如何在实际应用中结合这些技术,有效地处理和存储大数据。在开发过程中,还需要关注性能优化、...

    C# socket多线程通讯 含客户端

    在IT行业中,网络通信是软件开发的一...通过深入理解以上知识点,并实践这个“C# socket多线程通讯 含客户端”的例子,开发者能够熟练掌握C#中的Socket通信和多线程技术,为构建高效、稳定的网络应用程序打下坚实基础。

    多线程和套接字编程程序

    这些小型程序,如命令解释器、ping和客户端服务器示例,都是多线程和套接字编程实践的好例子。通过分析和学习这些代码,初学者可以更好地理解这两个主题,并掌握实际编程技巧。临界区的软件实现也是多线程编程中的一...

    有关Java的Socket编程入门例子

    7. **多线程处理**: - 当服务器需要同时处理多个客户端连接时,通常需要为每个连接创建一个新的线程。这样,服务器可以在处理一个客户端的同时接受其他客户端的连接请求。 8. **示例代码**: - 一个简单的服务器...

    C# socket多线程

    本篇文章将深入探讨如何在C#中结合Socket和多线程实现高效的网络通信。 首先,让我们理解Socket的基本概念。Socket是一种进程间通信机制,它是基于TCP/IP协议的,用于在网络中的两台计算机之间建立连接并交换数据。...

Global site tag (gtag.js) - Google Analytics