
Java 网络编程
文章平均质量分 89
tuobana123
从事J2EE开发,熟悉Spring Framework,Hibernate,Mybatis等开源java框架。
展开
-
java nio总结
JDK1.4开始,NIO API作为一个基于缓存区,并能提供非阻塞IO操作的API被引入。NIO引入了4个如果概念:缓存区:表示数据存放的容器,提供可读写的数据缓存区字符集:用来对缓存区数据进行编码和解码,在字节和字符之间转换通道:用来接收或发送数据,提供与文件、套接字等的连接,类似于Java IO中的流选择器:它与可选择通道一起定义了多路的,无阻塞的IO设施缓存区Buff原创 2013-06-06 15:02:52 · 1028 阅读 · 0 评论 -
java nio 如何建立和管理多个channel
1、建立多个监听socket,每个监听独立处理,互不干扰ServerSocketChannel sc1 = ServerSocketChannel.open();sc1.configureBlocking(false);sc1.socket().bind(new InetSocketAddress());SelectionKey skey1 = sc1.register(selec原创 2013-05-17 19:45:54 · 1876 阅读 · 1 评论 -
java 简单的文件上传下载服务器模型(IO + 多线程)
最近学习网络编程,多线程,IO等知识,综合这些知识写了个简单的文件上传下载服务器模型,目前是基于IO+多线程的方式,比较简单,异常基本没有处理,将就一下,哈哈。后续会将其改造为NIO的方式,最后再将其改造成NIO+多线程的方式,敬请期待,^_^服务器端基于Java IO+多线程package com.myftp.server;import java.net.InetSocketAd原创 2013-07-31 18:47:32 · 3681 阅读 · 0 评论 -
netty4.0.x源码分析—executor和loop
之前在第一篇文章里面对event的总体结构进行了简单的分析,没有结合代码理清流程,所以对于excutor和loop的具体执行机制还是很模糊,这篇文章针对代码从上至下进行分析,相信对理解excutor和loop到底是怎么关联的有所帮助。 我们基于服务端常用的代码,EventLoopGroup bossGroup = new NioEventLoopGroup();为主线进行分析,这个原创 2013-09-24 20:19:11 · 5736 阅读 · 0 评论 -
netty4.0.x源码分析—bootstrap
Bootstrap的意思就是引导,辅助的意思,在编写服务端或客户端程序时,我们都需要先new一个bootstrap,然后基于这个bootstrap调用函数,添加eventloop和handler,可见对bootstrap进行分析还是有必要的。1、bootstrap结构图bootstrap的结构比较简单,涉及的类和接口很少,如下图所示,其中Bootstrap则是客户端程序用的引导类,Serv原创 2013-09-24 15:47:19 · 18526 阅读 · 3 评论 -
netty4.0.x源码分析—write和flush
一般的开发者write和flush数据,都是基于ChannelHandlerContext ctx,然后调用其相应的write和flush方法。下面分别对这两个方法进行代码分析。(这里顺便提示一下,这两个方法都是从应用往底层发数据,属于OutboundHandler类型。如果没有特别的需求,我们不需要定义自己的handler,可以使用默认的Handler,这个在后面的分析中会体现。)1、wri原创 2013-09-24 11:18:52 · 11898 阅读 · 2 评论 -
netty4.0.x源码分析—event
备注:本文的分析基于netty4.0.9final版本1、event总体结构图event总体结构类图如下:2、event关键类和接口分析1)基于NioEventLoop对关键类和接口进行分析,下面是它的关系图:EventExecutor相当于只有一个EventExcutor的EventExecutorGroup,它的next方法返回的是自己的引用原创 2013-09-23 09:35:42 · 5934 阅读 · 1 评论 -
java nio编程细节
1、什么时候注册可读,可写事件Key在connect时注册为SelectionKey.OP_CONNECT,当检测到连接完成时,才将Key转换为可读或可写事件,key.interestOps(OP_WRITE/OP_READ);key在bind时注册为SelectionKey.OP_ACCEPT,当检测到连接到来时,才将Key转换为可读或可写事件。key不能随意注册为可写事件;当注原创 2013-06-17 11:36:43 · 1049 阅读 · 0 评论 -
java nio socketChannel read
当socketChannel为阻塞方式时(默认就是阻塞方式)read函数,不会返回0,阻塞方式的socketChannel,若没有数据可读,或者缓冲区满了,就会阻塞,直到满足读的条件,所以一般阻塞方式的read是比较简单的,不过阻塞方式的socketChannel的问题也是显而易见的。这里我结合基于NIO 写ftp服务器调试过程中碰到的问题,总结一下非阻塞场景下的read碰到的问题。注意:原创 2013-08-02 09:37:12 · 16086 阅读 · 4 评论 -
java 简单的文件上传下载服务器模型(NIO 版本)
前面写了一篇文章是基于IO+多线程的文件上传下载服务器模型,这篇文章是它的后续,基于NIO实现文件的上传功能。需要注意的地方:代码通过判断read的返回值来确定是否客户端上传结束。所以这里要求客户端上传完毕之后,关闭socket,因为服务端不知道在时候去转换为写事件。后续可以做如下改进:客户端上传文件的大小是未知的,可以先将文件的大小发过来,然后服务器根据接受到的数据判断客户端是否上传原创 2013-08-02 17:22:48 · 11149 阅读 · 1 评论 -
netty4.0.x源码分析—ChannelPipeline
备注:本文的分析基于netty 4.0.9final版本1、ChannelPipeline结构图2、关键类和接口分析上一篇关于Channel的文章,在AbstractChannel的介绍中,以及提到了pipeline,这是操作处理的入口,是一个比较重要的概念,这里有必要对pipeline分析一下。1)ChannelInboundInvoker/** * Inter原创 2013-09-23 17:16:19 · 8249 阅读 · 0 评论 -
netty4.0.x源码分析—channel
备注:本文的分析基于netty 4.0.9final版本,仅对Nio进行分析,因为本人对Socket编程比较感兴趣。1、channel总体机构图nio channel的总体结构图如下:2、关键类和接口分析2.1 基于NioServerSocketChannel进行分析1)ChannelChannel是顶层接口,继承了AttributeMap, ChannelOut原创 2013-09-23 15:33:27 · 13792 阅读 · 3 评论 -
netty websocket 后台消息推送
websocket server端的代码:public class WebSocketServer { private final int port; public static ChannelHandlerContext ctx = null; public WebSocketServer(int port) { this.port = p原创 2013-08-19 12:45:25 · 15156 阅读 · 4 评论 -
基于netty的wsproxy 访问xenserver的vm console
当我们需要通过网页直接访问XenServer的vm console时,我们可以直接使用websocket建立和xenserver的连接,这种方式有个问题是xenserver的主机为了支持这种WebSocket的访问方式,会在Xenserver的主机上面起很多wsproxy,作为xenserver vm console和websocket的代理。若我们不希望Xenserver加大负担,我们希望实现自原创 2013-10-30 14:54:31 · 2205 阅读 · 1 评论