public class BIOServer {
public static void main(String[] args) throws Exception {
//线程池机制
//思路
//1. 创建一个线程池
//2. 如果有客户端连接,就创建一个线程,与之通讯(单独写一个方法)
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
//创建ServerSocket
ServerSocket serverSocket = new ServerSocket(6666);
System.out.println("服务器启动了");
while (true) {
System.out.println("线程信息 id =" + Thread.currentThread().getId() + " 名字=" + Thread.currentThread().getName());
//监听,等待客户端连接
System.out.println("等待连接....");
final Socket socket = serverSocket.accept();
System.out.println("连接到一个客户端");
//就创建一个线程,与之通讯(单独写一个方法)
newCachedThreadPool.execute(new Runnable() {
public void run() { //我们重写
//可以和客户端通讯
handler(socket);
}
});
}
}
//编写一个handler方法,和客户端通讯
public static void handler(Socket socket) {
try {
System.out.println("线程信息 id =" + Thread.currentThread().getId() + " 名字=" + Thread.currentThread().getName());
byte[] bytes = new byte[1024];
//通过socket 获取输入流
InputStream inputStream = socket.getInputStream();
//循环的读取客户端发送的数据
while (true) {
System.out.println("线程信息 id =" + Thread.currentThread().getId() + " 名字=" + Thread.currentThread().getName());
System.out.println("read....");
int read = inputStream.read(bytes);
if(read != -1) {
System.out.println(new String(bytes, 0, read
)); //输出客户端发送的数据
} else {
break;
}
}
}catch (Exception e) {
e.printStackTrace();
}finally {
System.out.println("关闭和client的连接");
try {
socket.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
BIO实例及分析
原创umetrip_zhxm ©著作权
©著作权归作者所有:来自51CTO博客作者umetrip_zhxm的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:缓冲区Buffer
下一篇:3、阿里云镜像加速配置
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MapReduce原理及实例分析
Hadoop Map/Reduce原理及实例分析
分区 map hadoop -
mount命令详解及实例分析
mount命令详解功能:加载指定的文件系统。 语法:mount [-afFhnrvVw] [-L] [-o] [-t] [设备名
linux windows system 磁盘 disk -
kafka producer实例及原理分析
kafka producer 实例 原理分析
实例 原理 kafka producer -
tomcat架构分析(connector BIO 实现)
,因此根据解析过的h
HTTP tomcat apache -
Redis高级特性介绍及实例分析
Redis高级特性介绍及实例分析
集群 redis