`
baobeituping
  • 浏览: 1068108 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java Socket实战之二 多线程通信

 
阅读更多

本文地址:http://blog.csdn.net/kongxx/article/details/7259465

Java Socket实战之一 单线程通信

上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后续Client不能再继续连接,所以需要做些改动,当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。具体代码如下:

  1. package com.googlecode.garbagecan.test.socket.sample2;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.io.PrintWriter;  
  7. import java.net.ServerSocket;  
  8. import java.net.Socket;  
  9.   
  10. public class MyServer {  
  11.     public static void main(String[] args) throws IOException {  
  12.         ServerSocket server = new ServerSocket(10000);  
  13.           
  14.         while (true) {  
  15.             Socket socket = server.accept();  
  16.             invoke(socket);  
  17.         }  
  18.     }  
  19.       
  20.     private static void invoke(final Socket client) throws IOException {  
  21.         new Thread(new Runnable() {  
  22.             public void run() {  
  23.                 BufferedReader in = null;  
  24.                 PrintWriter out = null;  
  25.                 try {  
  26.                     in = new BufferedReader(new InputStreamReader(client.getInputStream()));  
  27.                     out = new PrintWriter(client.getOutputStream());  
  28.   
  29.                     while (true) {  
  30.                         String msg = in.readLine();  
  31.                         System.out.println(msg);  
  32.                         out.println("Server received " + msg);  
  33.                         out.flush();  
  34.                         if (msg.equals("bye")) {  
  35.                             break;  
  36.                         }  
  37.                     }  
  38.                 } catch(IOException ex) {  
  39.                     ex.printStackTrace();  
  40.                 } finally {  
  41.                     try {  
  42.                         in.close();  
  43.                     } catch (Exception e) {}  
  44.                     try {  
  45.                         out.close();  
  46.                     } catch (Exception e) {}  
  47.                     try {  
  48.                         client.close();  
  49.                     } catch (Exception e) {}  
  50.                 }  
  51.             }  
  52.         }).start();  
  53.     }  
  54. }  

下面是Client程序代码:

  1. package com.googlecode.garbagecan.test.socket.sample2;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.InputStreamReader;  
  5. import java.io.PrintWriter;  
  6. import java.net.Socket;  
  7.   
  8. public class MyClient {  
  9.     public static void main(String[] args) throws Exception {  
  10.         Socket socket = new Socket("localhost"10000);  
  11.         BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  12.         PrintWriter out = new PrintWriter(socket.getOutputStream());  
  13.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
  14.   
  15.         while (true) {  
  16.             String msg = reader.readLine();  
  17.             out.println(msg);  
  18.             out.flush();  
  19.             if (msg.equals("bye")) {  
  20.                 break;  
  21.             }  
  22.             System.out.println(in.readLine());  
  23.         }  
  24.         socket.close();  
  25.     }  
  26. }  

测试,首先运行MyServer类,然后运行两个MyClient类,然后分别在每个MyClient的提示符下输入字符串,就可以看到Server可以分别接收处理每个Client的请求了。

分享到:
评论

相关推荐

    Java Socket实战之二 多线程通信 .

    我们将结合"Java Socket实战之二 多线程通信"这篇博文进行深入解析。 首先,了解Socket的基本概念。Socket在计算机网络中扮演着客户端与服务器之间通信的桥梁角色。它提供了低级别的、面向连接的、基于TCP/IP协议的...

    java socket tcpip多线程网络通信服务器客户端

    在“java socket tcpip多线程网络通信服务器客户端”这个主题中,我们将深入探讨如何使用Java Socket实现基于TCP/IP协议的多线程服务器和客户端通信。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的...

    java socket 编程文档

    Java套接字编程是网络通信的核心技术之一,它允许Java应用程序之间或应用程序与远程服务器之间的双向数据传输。本文将深入探讨Java Socket编程的基础知识、关键概念以及如何在实践中应用。 一、Socket概述 Socket,...

    java socket 中文教程

    Java Socket是Java编程语言中用于网络通信的核心API,它提供了低级别的、面向连接的、基于TCP/IP协议的网络通信服务。本教程将深入探讨Java Socket的相关知识点,旨在帮助开发者理解和掌握如何在Java环境中构建网络...

    Java代码写的局域网多线程TCP、Socket多人聊天室winsock.zip

    通过这个项目,开发者可以学习到如何在Java环境中使用TCP和Socket进行网络通信,以及如何使用多线程来提高程序的并发处理能力。同时,对于理解和实践Java网络编程以及并发编程具有很高的实战价值。

    java+socket 及多线程线程池应用(IBM教程)

    通过实战,你可以学习到如何在实际项目中应用Java Socket、多线程和线程池,解决具体问题。 8. **最佳实践**:教程可能还会提供一些最佳实践建议,如如何设计健壮的并发系统,如何处理网络异常,以及如何利用线程池...

    javasocket多线程.pdf

    Java Socket 多线程编程 Java Socket 是 Java 语言中用于网络编程的 API,提供了基于 TCP/IP 协议的网络通信功能。在 Java 中,使用 Socket 编程可以实现客户端与服务器端之间的数据交换。今天,我们将学习使用 ...

    java Socket通信实现.zip

    Java Socket通信是网络编程中的基础概念,主要用于两台计算机之间的数据传输。Socket在Java中被封装为类,提供了客户端和服务器端进行双向通信的能力。在这个"java Socket通信实现.zip"的压缩包中,可能包含了关于...

    java socket 学习资料

    Java Socket是Java编程语言中用于实现网络通信的核心API,它基于TCP/IP协议栈,提供了低级别的网络连接功能。Socket在Java中被广泛用于构建客户端-服务器应用,例如创建Web服务器、聊天应用程序、文件传输等。以下是...

    JAVA Socket 网络编程教程

    Java Socket网络编程是Java开发中一个重要的组成部分,它允许应用程序通过网络进行通信,实现客户端与服务器之间的数据交换。本教程将深入探讨Java Socket编程的基本概念、原理和实践应用。 一、Socket基本概念 ...

    《java开发实战经典》第二版李兴华课后习题答案

    5. Java语言特点:Java是一种面向对象的编程语言,拥有简单的语法结构,避免了复杂的指针操作,支持多线程编程,拥有自动垃圾回收机制,以及相对较高的安全性。其最大的特色是支持跨平台的可移植性。 6. Java中的...

    基于Java的源码-Java Socket通信实现.zip

    10. **实战应用**:Java Socket通信不仅限于命令行程序,还可以嵌入到Web应用、桌面应用中,例如,WebSocket协议就是基于TCP的Socket实现的,用于在Web浏览器和服务器之间进行全双工通信。 以上是对"基于Java的源码...

    java开发实战经典

    6. **多线程**:讲解线程的创建方式(Thread类和Runnable接口)、线程同步(synchronized关键字、wait/notify机制、Lock锁)以及并发工具类如Semaphore、CountDownLatch等。 7. **网络编程**:包括Socket编程,理解...

    java socket通信h

    Java Socket通信是网络编程中的重要组成部分,主要用于实现客户端与服务器之间的双向通信。Socket在Java中提供了TCP(传输控制协议)的编程接口,使得开发者能够构建可靠的、基于连接的数据传输通道。下面将详细介绍...

    Java Socket示例

    综上所述,"Java Socket示例"是一个展示如何在Java中使用Socket进行网络通信的基础应用,它涉及到了网络编程、多线程和GUI设计等多个方面,是学习Java网络编程的绝佳起点。通过理解和实践这个示例,开发者可以更好地...

    java socket教程.

    1. **多线程**:服务器端通常需要同时处理多个客户端,可使用多线程技术,每个客户端连接分配一个线程。 2. **NIO(非阻塞I/O)**:Java NIO提供了更高效的数据读写方式,适用于高并发场景。 八、实战练习 1. 创建...

    java的socket编程课件~~~

    本课件详细介绍了Java Socket编程的基础知识和实战技巧,对于学习和理解网络编程具有极大的帮助。 首先,Socket编程基于TCP/IP协议栈,它提供了低级别的网络通信接口。在Java中,`java.net.Socket`类代表了客户端的...

    Java开发实战1200例(第1卷)

    本书覆盖了Java语言的基础到高级特性,包括面向对象编程、类库使用、异常处理、多线程、网络编程、数据库操作等各个方面。以下是对这些知识点的详细阐述: 1. **Java基础**:书中首先会介绍Java语言的基本语法,如...

    浅出Java Socket编程

    Java Socket编程是网络编程的基础,它是Java平台中用于实现客户端-服务器通信的关键组件。本教程将深入浅出地探讨Java Socket编程的核心概念和技术,帮助开发者理解如何构建可靠的网络应用程序。 一、Socket概述 ...

    Java Socket实现网络通话源码程序

    Java Socket 是一种基于TCP/IP协议族的通信方式,它允许两台计算机通过互联网进行双向通信。在Java中,Socket API提供了客户端(Client)和服务器端(Server)的通信接口,使得开发者可以创建出可靠的、基于连接的...

Global site tag (gtag.js) - Google Analytics