- 浏览: 273334 次
- 性别:
- 来自: 北京
最新评论
-
gotosuzhou:
好的 谢谢分享
Spring 事务异常回滚 -
cd249745647:
哈哈
Spring MVC REST 例子 -
向日葵上的小蜜蜂:
代码都差不多贴出来了,为啥不直接提供下载呢
Spring MVC REST 例子 -
he3109006290:
我猜它应该有个算法,当出现长时间处理的情况的,它自动会启动另外 ...
netty 疑惑 -
yanghoho6:
很好, 学习了,
oracle基本的索引概念.doc
import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { ServerSocket serverSocket; private void initServer() throws IOException { serverSocket = new ServerSocket(); serverSocket.bind(new InetSocketAddress("localhost", 8000)); System.out.println("服务器已启动......"); } private void listenSocket() throws IOException { while (true) { Socket client = serverSocket.accept(); System.out.println("和客户端" + client.toString() + "建立连接......"); new ClientThread(client); } } public static void main(String[] args) throws IOException { Server server = new Server(); server.initServer(); server.listenSocket(); } } class ClientThread extends Thread { private static final String BYE = "bye"; private Socket socket; private DataInputStream inputStream; private DataOutputStream outputStream; BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in)); Socket client; private boolean openFlag = true; public ClientThread(Socket client) { super(); this.client = client; process(); } public void process() { try { this.inputStream = new DataInputStream(client.getInputStream()); this.outputStream = new DataOutputStream(client.getOutputStream()); // 监听System.in的输入,把输入转输入给客户 new Thread() { public void run() { while (openFlag) { try { //sysin.ready()这个很重要,先判断是否有值可读,有则读,没有这轮训 //如果一开始就用sysin.readLine那么会阻塞,导致程序如果出现异常,而不能close if (sysin.ready()) { String msg = sysin.readLine(); if (msg.toLowerCase().equals(BYE)) { shutdown(); break; } outputStream.writeUTF(msg); outputStream.flush(); } } catch (IOException e) { shutdown(); break; } } } }.start(); while (openFlag) { try { String msg = inputStream.readUTF(); System.out.println("客户端说: " + msg); } catch (IOException e) { shutdown(); break; } } } catch (IOException e) { System.out.println("连接失败"); shutdown(); } } public void shutdown() { System.out.println("关闭Clent连接"); try { if (socket != null) { socket.close(); } if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } if (sysin != null) { sysin.close(); } System.out.println("关闭Clent连接完成"); } catch (IOException e) { e.printStackTrace(); } } }
import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.net.Socket; public class Client { private static final String HOST = "localhost"; private static final int PORT = 8000; private static final String BYE = "bye"; private Socket socket = new Socket(); private DataInputStream inputStream; private DataOutputStream outputStream; private boolean openFlag = true; private BufferedReader sysin = new BufferedReader(new InputStreamReader( System.in)); public static void main(String[] args) { Client client = new Client(); client.doProcess(); } public void doProcess() { try { socket.connect(new InetSocketAddress(HOST, PORT)); // socket.setSoTimeout(1000); System.out.println("已经和服务器端连接....."); this.inputStream = new DataInputStream(socket.getInputStream()); this.outputStream = new DataOutputStream(socket.getOutputStream()); // 监听System.in的输入,把输入转输入给客户 new Thread() { public void run() { while (openFlag) { try { // sysin.ready()这个很重要,先判断是否有值可读,有则读,没有这轮训 // 如果一开始就用sysin.readLine那么会阻塞,导致程序如果出现异常,而不能close if (sysin.ready()) { String msg = sysin.readLine(); if (msg.toLowerCase().equals(BYE)) { shutdown(); break; } outputStream.writeUTF(msg); outputStream.flush(); } } catch (IOException e) { shutdown(); break; } } } }.start(); while (openFlag) { try { String msg = inputStream.readUTF(); System.out.println("服务端说: " + msg); } catch (IOException e) { shutdown(); break; } } } catch (IOException e) { System.out.println("连接失败"); e.printStackTrace(); shutdown(); } System.out.println("over"); } public void shutdown() { System.out.println("开始关闭连接"); openFlag = false; try { if (socket != null) { socket.close(); } if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } if (sysin != null) { sysin.close(); } System.out.println("关闭完成"); } catch (IOException e) { e.printStackTrace(); } } }
发表评论
-
自增 自减 java和c的区别
2012-03-10 15:57 1399JAVA public class Test { ... -
瞎聊系统性能优化
2012-02-19 23:46 1102一个系统中影响性能的无非就是CPU计算能力,磁盘、网络的读写能 ... -
在tomcat中,通过IP访问web系统,不需要端口号的方法(转)
2012-02-06 11:10 8858源文章地址:http://sinian.iteye.com/b ... -
java 编码
2012-02-02 18:23 1133先看一个字符串 String str = &qu ... -
javassist与classLoader
2012-02-02 15:22 4266javassist.jar是个非常 ... -
tcp 和 java socket
2011-12-31 12:52 2779tcp socket 总结点 1 ... -
netty 疑惑
2011-12-01 18:27 2662netty的nio 模式如下 一个线程Boss使用 ... -
Apache Tomcat http_proxy 连接方式配置
2011-11-02 18:03 55531、安装Tomcat ,为了使域名保持一致,在conf\Cat ... -
谈线程池
2011-10-27 12:47 1503线程池原理:用指定数 ... -
设置tomcat启动参数
2011-09-15 16:58 1472window: 在catalina.bat 文件的开始处添加如 ... -
通过反汇编class看i++和++i的区别
2011-08-17 14:32 2070public void method4() ... -
hotspot 控制参数
2011-08-17 09:25 1263文档来源于 http://www.oracle.com ... -
Spring 事务异常回滚
2011-08-16 10:10 11077先看如下代码 @Transactional ... -
java IO和NIO测试
2011-08-11 12:08 1585测试环境:cpu:Q9500 4核 频率2.83GHZ ... -
静态锁和实例锁
2011-07-28 18:21 1929Java中可以对静态方法和实例方法使用synchroni ... -
BASE64 和Dom4j
2011-07-20 09:45 1262项目当中用到MD5做消息摘要,后通过BASE64转成字符 ... -
jetty httpServer和java6内置httpServer比较
2011-07-19 12:03 3034测试情况是客户端100个线程同时同时请求10000次,服务器端 ... -
Jetty HttpClent 异常
2011-07-15 13:48 1204使用Jetty HttpClent做异步请求,结果发现这 ... -
关于Hibernate延迟加载
2011-07-14 17:42 1064package com.lottery.test; ... -
Jetty内嵌Http服务器
2011-07-14 11:13 3354本例只是以HttpServlet方式实现,更多的方式可以通过h ...
相关推荐
Java线程:新特征-阻塞队列 Java线程:新特征-阻塞栈 Java线程:新特征-条件变量 Java线程:新特征-原子量 Java线程:新特征-障碍器 Java线程:深入ThreadLocal 一、标准例子 二、不用ThreadLocal 三、自己...
实现java模拟阻塞队列的例子,该代码包括,阻塞队列实现生产者,消费者。和模拟阻塞队列实现生产者及消费者模式,帮助你更好的理解java多线程
本压缩包,总共包含两个文档,JAVA多线程编程详解-详细操作例子和 Java多线 程编程总结 例如,runnable、thread、stop()、 suspend、yield、setPriority()、getPriority()、synchronized、wait()、join、线程池同步...
用JAVA实现缓冲多线程无阻塞读取远程文件.doc
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
volatile关键字的非原子性、volatile关键字的使用、AtomicInteger原子性操作、线程安全小例子:多个线程竞争问题、多个线程多个锁问题、创建一个缓存的线程池、多线程使用Vector或者HashTable的示例(简单线程同步问题...
监视JVM线程并在给定时间内阻塞线程时保存线程转储。 用法 从下载jar 将其添加到要监视的应用程序的命令行中: java -javaagent:jvm-monitoring-agent-0.9.0.jar=threshold=1000,debug ...rest of command 配置...
本书是Java 2技术权威指南,全面覆盖Java 2技术的高级主题,包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时...
举个例子吧 你服务器做一个聊天室 按照以前的阻塞式IO 你必须为每个连接创建一个线程 因为当你调用如 in read buf 时 线程会阻塞在这里 而采用nio 只要注册了事件 它内部采用反应模式 当有IO事件发生时 再调度它 而...
java concurrent 阻塞队列 线程 里面有详细的例子,下载后请认真阅读里面的内容,可能有点难以理解,请耐心
当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。 QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。 QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
并结合例子说明了两种创建线程的方法。 线程是指程序中能顺序执行的一个序列。一个线程只有一个入口点但可能有几个出口点不过,每个时刻的执行点总是只有一个。线程是不能独立运行的程序,而只是某个整体程序...
第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...
第12章 java多线程技术与应用性能优化 12.1 java多线程技术 12.1.1 进程与线程 12.1.2 线程的生命周期 12.2 并行任务与性能 12.2.1 并行任务与多线程 12.2.2 并行任务与死锁 12.3 线程池技术与应用性能优化 12.3.1 ...
Socket就是你想用Java代码API去组织数据,指定协议去通讯,很烦!写的太多代码!Socket帮你封装了 你只需要调用一下Socket的方法就行了,省事!回到图1-1,你会发现线程开太多了 ,100000人连接我开100000线程吗,还是...