- 浏览: 337079 次
- 性别:
- 来自: 广州
文章分类
最新评论
当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。
具体代码如下:
package com.googlecode.garbagecan.test.socket.sample2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(10000); while (true) { Socket socket = server.accept(); invoke(socket); } } private static void invoke(final Socket client) throws IOException { new Thread(new Runnable() { public void run() { BufferedReader in = null; PrintWriter out = null; try { in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new PrintWriter(client.getOutputStream()); while (true) { String msg = in.readLine(); System.out.println(msg); out.println("Server received " + msg); out.flush(); if (msg.equals("bye")) { break; } } } catch(IOException ex) { ex.printStackTrace(); } finally { try { in.close(); } catch (Exception e) {} try { out.close(); } catch (Exception e) {} try { client.close(); } catch (Exception e) {} } } }).start(); } } 下面是Client程序代码:
package com.googlecode.garbagecan.test.socket.sample2; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class MyClient { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 10000); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true) { String msg = reader.readLine(); out.println(msg); out.flush(); if (msg.equals("bye")) { break; } System.out.println(in.readLine()); } socket.close(); } } 测试,首先运行MyServer类,然后运行两个MyClient类,然后分别在每个MyClient的提示符下输入字符串,就可以看到Server可以分别接收处理每个Client的请求了。
http://blog.163.com/liyinhui20080527@126/blog/static/81523258201231954430176/
具体代码如下:
package com.googlecode.garbagecan.test.socket.sample2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(10000); while (true) { Socket socket = server.accept(); invoke(socket); } } private static void invoke(final Socket client) throws IOException { new Thread(new Runnable() { public void run() { BufferedReader in = null; PrintWriter out = null; try { in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new PrintWriter(client.getOutputStream()); while (true) { String msg = in.readLine(); System.out.println(msg); out.println("Server received " + msg); out.flush(); if (msg.equals("bye")) { break; } } } catch(IOException ex) { ex.printStackTrace(); } finally { try { in.close(); } catch (Exception e) {} try { out.close(); } catch (Exception e) {} try { client.close(); } catch (Exception e) {} } } }).start(); } } 下面是Client程序代码:
package com.googlecode.garbagecan.test.socket.sample2; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class MyClient { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 10000); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true) { String msg = reader.readLine(); out.println(msg); out.flush(); if (msg.equals("bye")) { break; } System.out.println(in.readLine()); } socket.close(); } } 测试,首先运行MyServer类,然后运行两个MyClient类,然后分别在每个MyClient的提示符下输入字符串,就可以看到Server可以分别接收处理每个Client的请求了。
http://blog.163.com/liyinhui20080527@126/blog/static/81523258201231954430176/
发表评论
-
Mina重连
2014-05-26 21:29 2906import com.sun.swing.internal. ... -
面试经典
2014-05-24 09:29 6351.mysql innodb引擎,什么叫聚集索引,与非聚集索 ... -
一拍网网站系统架构图
2014-03-28 21:24 591一拍网网站系统架构图 -
Window下安装配置nginx
2013-08-12 16:53 774安装:http://www.cnblogs.com/wen ... -
使用线程池的好处
2013-07-18 14:41 1227使用线程池有两个好处: 1.可以创建和销毁线程所带来的系统 ... -
Java ThreadLocal使用浅析
2013-07-18 14:36 449ThreadLocal通过在其内部保存变量的副本,并且各个副本 ... -
MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
2013-07-05 13:06 1145http://blog.csdn.net/zhangwei ... -
分享一位网友的架构杂谈
2013-05-20 23:16 899不容类型的网站,并发处理不一样,例如针对sns这种类型的网站 ... -
JSP页面静态化
2013-04-08 09:20 858http://www.java-zone.org/644.ht ... -
Java compile to C++
2013-03-19 14:53 500http://code.google.com/a/eclips ... -
几个TCP Socket的通信框架
2013-03-19 12:26 986http://www.oschina.net/p/simple ... -
宝贝鱼
2013-03-18 23:54 671http://code.google.com/p/cshbbr ... -
将Java程序注册成系统服务(NT服务)
2013-03-16 16:14 599http://blog.csdn.net/small____f ... -
Java内存回收机制
2013-03-13 15:47 807http://www.iteye.com/blogs/tag/ ... -
支付宝,百付宝集成
2013-03-13 14:01 941http://help.alipay.com/support/ ... -
SSH+EXTJS项目下载
2013-03-11 23:02 411http://download.csdn.net/tag/Ex ... -
Hibernate中使用Threadlocal创建线程安全的Session
2013-03-04 20:39 564http://blog.sina.com.cn/s/blog_ ... -
Java 多线程的一个例子
2012-10-09 09:48 1012目录: 1 synchronized的 ... -
app引擎
2012-07-10 09:39 0http://sae.sina.com.cn/ htt ... -
Java多线程之消费者生产者模式
2012-07-09 22:27 853/*@author shijin * 生产者与消费者模 ...
相关推荐
Java Socket 多线程通信是网络编程中的一个重要概念,它涉及到Java的基础网络API以及多线程技术。在Java中,Socket是实现客户端-服务器通信的基础,而多线程则允许程序同时处理多个任务,这对于构建能够同时服务多个...
Java Socket 多线程通信技术 Java Socket 通信技术是网络通信的关键技术之一。通过实现一个简单的服务端、客户端聊天程序,文章对 Java Socket 通信技术的原理和实现进行了详细的介绍。 网络通信设计 网络通信...
基于多线程实现的JavaSocket客户端-服务端点对点异步通信程序代码
总结来说,Java Socket多线程是构建高并发网络服务的关键技术。通过合理地设计和实现,可以有效地提升服务器的并发处理能力,为用户提供更高效的服务。在实际项目中,应根据具体需求选择适合的线程模型,例如线程池...
总的来说,Java Socket多线程通信是一种强大的工具,用于构建分布式系统和网络应用。理解如何创建和管理Socket连接,以及如何在多线程环境下处理这些连接,是成为熟练的Java网络程序员的关键步骤。通过实践和理解...
Java Socket多线程文件传输实例项目是一个典型的网络编程应用场景,主要涉及了Socket编程、多线程处理以及文件I/O操作等关键知识点。在这个项目中,开发者利用Java的Socket API实现了一个能够支持多个客户端同时进行...
在这个“Java Socket 多线程实例”中,我们将会探讨如何结合这两个关键概念来创建一个聊天服务器和客户端应用。 首先,`ChatServer.java` 文件通常包含了服务器端的代码。在Java中,通过`java.net.ServerSocket` 类...
Java Socket多线程聊天软件是基于Java编程语言构建的一个网络通信应用,主要利用Socket API来实现客户端与服务器之间的实时通信。在这个系统中,服务器端能够同时处理多个客户端连接,这得益于Java的多线程特性。SWT...
Java Socket多线程简易实现是网络编程中的一个基础概念,主要应用于客户端与服务器之间的通信。在Java中,Socket是基于TCP协议的,提供了一种可靠的、面向连接的字节流通信方式。多线程则是Java并发编程的重要特性,...
总的来说,本项目结合了Java的Socket通信、多线程并发控制、Hibernate ORM以及MySQL数据库,构建了一个能处理并发网络请求并存储信息的系统。这样的设计使得系统具备良好的扩展性和健壮性,能够高效地服务大量用户。...
"serverandclient.txt"可能是一个简单的服务器和客户端程序的示例,展示了如何使用Java等编程语言实现Socket多线程通信。 在实际开发中,需要注意的是,多线程通信会带来同步和互斥的问题,需要使用适当的锁机制...
本篇主要探讨的是如何在Java中实现多线程通信,利用Socket技术构建高效的并发服务器。我们将结合"Java Socket实战之二 多线程通信"这篇博文进行深入解析。 首先,了解Socket的基本概念。Socket在计算机网络中扮演着...
本项目"java socket多线程多人聊天室"旨在利用Java的Socket API创建一个支持多个客户端同时连接的聊天环境。在这个项目中,主要涉及三个关键组件:Server(服务器)、Client(客户端)和User(用户)。 首先,`...
以下是关于Android与PC机Socket多线程通信的关键知识点: 1. **Socket基础**:Socket是网络通信中的一个概念,它代表了两台机器间的一个连接端点,允许数据在网络中传输。在Java中,Socket类和ServerSocket类提供了...
Java Socket多线程文件上传下载实例项目是一种基于Java网络编程技术实现的,旨在处理大量并发连接的文件传输服务。在本项目中,Socket是客户端与服务器之间通信的基础,它允许两个应用程序通过网络交换数据。多线程...
Java TCP多线程通信是网络编程中的一个重要概念,它结合了Java的Socket编程与多线程技术,使得多个客户端能够同时与服务器进行交互。在Java中,TCP(传输控制协议)提供了一种可靠的数据传输方式,确保数据的有序、...
本文将深入探讨Java Socket多线程的应用,并通过实例解析其工作原理。 一、Java Socket基础 Java Socket类代表了TCP协议中的一个连接,Socket对象由服务器端的ServerSocket监听并接受客户端的连接请求后创建。...
总的来说,"java,socket多线程一对一聊天"项目涵盖了Java网络编程的基础知识,包括Socket通信、多线程以及基本的消息传递机制。虽然不支持并发,但对于学习和理解这些基本概念仍然很有价值。在实际应用中,可以通过...
Java Socket 是一种网络通信协议,它是Java...实际的代码会包含更多的细节,如错误处理、多线程管理和用户界面交互等。通过学习和实践这个示例,你可以进一步提升对Java网络编程的理解,并能够构建自己的简单聊天应用。