




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TCP/IP+NIO服务器端:1 ServerSocketChannel.open();打开ServerSocketChannel,从而获得ServerSocketChannel实例对象。ServerSocketChannel针对面向流的侦听套接字的可选择通道服务器套接字通道不是侦听网络套接字的完整抽象。必须通过调用 socket 方法所获得的关联 ServerSocket 对象来完成对套接字选项的绑定和操作。不可能为任意的已有服务器套接字创建通道,也不可能指定与服务器套接字通道关联的服务器套接字所使用的 SocketImpl 对象。 通过调用此类的 open 方法创建服务器套接字通道。新创建的服务器套接字通道已打开,但尚未绑定。试图调用未绑定的服务器套接字通道的 accept 方法会导致抛出 NotYetBoundException。可通过调用相关服务器套接字的某个 bind 方法来绑定服务器套接字通道。public abstract ServerSocket socket()获取与此通道关联的服务器套接字。public static ServerSocketChannel open() throws IOException打开服务器套接字通道。 通过调用系统级默认 SelectorProvider 对象的 openServerSocketChannel 方法来创建新的通道。 新通道的套接字最初是未绑定的;可以接受连接之前,必须通过它的某个套接字的 bind 方法将其绑定到具体的地址。返回: 新的套接字通道 public abstract SocketChannel accept() throws IOException接受到此通道套接字的连接。 如果此通道处于非阻塞模式,那么在不存在挂起的连接时,此方法将直接返回 null。否则,在新的连接可用或者发生 I/O 错误之前会无限期地阻塞它。 不管此通道的阻塞模式如何,此方法返回的套接字通道(如果有)将处于阻塞模式。 此方法执行的安全检查与 ServerSocket 类的 accept 方法执行的安全检查完全相同。也就是说,如果已安装了安全管理器,则对于每个新的连接,此方法都会验证安全管理器的 checkAccept 方法是否允许使用该连接的远程端点的地址和端口号。 返回: 用于新连接的套接字通道,或者如果此通道处于非阻塞模式并且没有要接受的可用连接,则返回 null 2 ServerSocketChannel. configureBlocking(false);将Channel设置为非阻塞模式。public final SelectableChannelconfigureBlocking(booleanblock) throws IOException调整此通道的阻塞模式。参数: block - 如果为 true,则此通道将被置于阻塞模式;如果为 false,则此通道将被置于非阻塞模式 3 ServerSocketChannel. Socket();获得ServerSocket对象,从而进行监听端口等的设置。4 ServerSocket.bind(port);制定服务器端监听的端口。public void bind(SocketAddressendpoint) throws IOException将 ServerSocket 绑定到特定地址(IP 地址和端口号)。 如果地址为 null,则系统将挑选一个临时端口和一个有效本地地址来绑定套接字。 参数: endpoint - 要绑定的 IP 地址和端口号。 5 Selector.open();打开Selector,从而获得Selector实例对象。类 Selector可通过调用此类的 open 方法创建选择器,该方法将使用系统的默认选择器提供者创建新的选择器。也可通过调用自定义选择器提供者的 openSelector 方法来创建选择器。通过选择器的 close 方法关闭选择器之前,它一直保持打开状态。通过 SelectionKey 对象来表示可选择通道到选择器的注册。public static Selector open() throws IOException打开一个选择器。 通过调用系统级默认 SelectorProvider 对象的 openSelector 方法来创建新的选择器。 返回: 新的选择器 6 ServerSocketChannel.register(Selector,int);向ServerSocketChannel实例对象注册selector实例对象和所感性趣的事情public final SelectionKey register(Selectorsel, intops) throws ClosedChannelException向给定的选择器注册此通道,返回一个选择键。 调用此便捷方法的形式为 sc.register(sel, ops)与下列方法调用完全相同: sc.register(sel, ops, null)参数: sel - 要向其注册此通道的选择器 ops - 所得键的可用操作集 返回: 表示此通道向给定选择器注册的键 7 while(true);正常情况下,保证服务器一直处于运行状态。8 selector.select();获取selector实例对象中需要处理的SelectorKey的数量。public abstract int select()throws IOException选择一组键,其相应的通道已为 I/O 操作准备就绪。 此方法执行处于阻塞模式的选择操作。仅在至少选择一个通道、调用此选择器的 wakeup 方法,或者当前的线程已中断(以先到者为准)后此方法才返回。 返回: 已更新其准备就绪操作集的键的数目,该数目可能为零 public abstract int select(longtimeout) throws IOException选择一组键,其相应的通道已为 I/O 操作准备就绪。 此方法执行处于阻塞模式的选择操作。仅在至少选择一个通道、调用此选择器的 wakeup 方法、当前的线程已中断,或者给定的超时期满(以先到者为准)后此方法才返回。 此方法不提供实时保证:它安排了超时时间,就像调用 Object.wait(long) 方法一样。 参数: timeout - 如果为正,则在等待某个通道准备就绪时最多阻塞 timeout 毫秒;如果为零,则无限期地阻塞;必须为非负数 返回: 已更新其准备就绪操作集的键的数目,该数目可能为零 9 for(SelectionKey key:selector.selectedKeys()当selector实例对象中需要处理的SelectionKey的数量大于零时,遍历selector.selectedKeys,以对每个SelectionKey的事件进行处理。public abstract Set selectedKeys()返回此选择器的已选择键集。 可从已选择键集中移除键,但是无法直接添加键。试图向该键集中添加对象会导致抛出 UnsupportedOperationException。 已选择键集是非线程安全的。 返回: 此选择器的已选择键集 10 key.isAcceptable();判断SelectionKey的类型是否为客户端建立连接的类型。类 SelectionKeypublic abstract class SelectionKey extends Object表示 SelectableChannel 在 Selector 中的注册的标记。 每次向选择器注册通道时就会创建一个选择键。通过调用某个键的 cancel 方法、关闭其通道,或者通过关闭其选择器来取消 该键之前,它一直保持有效。取消某个键不会立即从其选择器中移除它;相反,会将该键添加到选择器的已取消键集,以便在下一次进行选择操作时移除它。可通过调用某个键的 isValid 方法来测试其有效性。 选择键包含两个表示为整数值的操作集。操作集的每一位都表示该键的通道所支持的一类可选择操作。 staticintOP_ACCEPT 用于套接字接受操作的操作集位。staticintOP_CONNECT 用于套接字连接操作的操作集位。staticintOP_READ 用于读取操作的操作集位。staticintOP_WRITE 用于写入操作的操作集位。public final boolean isAcceptable()测试此键的通道是否已准备好接受新的套接字连接。 调用此方法的形式为 k.isAcceptable() 形式,该调用与以下调用的作用完全相同: k.readyOps()&OP_ACCEPT!=0如果此键的通道不支持套接字接受操作,则此方法始终返回 false。 返回: 当且仅当 readyOps()&OP_ACCEPT 为非零值时才返回 true 11 key.channel();当SelectorKey的类型为acceptable时,从SelectionKey中获得其绑定的ServerSocketChannel对象。public abstract SelectableChannel channel()返回为之创建此键的通道。即使已取消该键,此方法仍继续返回通道。 返回: 此键的通道12 ServerSocketChannel.accept();接受客户端建立连接的请求,并返回SocketChannel对象。public abstract SocketChannel accept()throws IOException接受到此通道套接字的连接。 如果此通道处于非阻塞模式,那么在不存在挂起的连接时,此方法将直接返回 null。否则,在新的连接可用或者发生 I/O 错误之前会无限期地阻塞它。 不管此通道的阻塞模式如何,此方法返回的套接字通道(如果有)将处于阻塞模式。 此方法执行的安全检查与 ServerSocket 类的 accept 方法执行的安全检查完全相同。也就是说,如果已安装了安全管理器,则对于每个新的连接,此方法都会验证安全管理器的 checkAccept 方法是否允许使用该连接的远程端点的地址和端口号。 返回: 用于新连接的套接字通道,或者如果此通道处于非阻塞模式并且没有要接受的可用连接,则返回 null 类 SocketChannelpublic abstract class SocketChannel extends AbstractSelectableChannel implements ByteChannel, ScatteringByteChannel, GatheringByteChannel针对面向流的连接套接字的可选择通道。 套接字通道不是连接网络套接字的完整抽象。必须通过调用 socket 方法所获得的关联 Socket 对象来完成对套接字选项的绑定、关闭和操作。不可能为任意的已有套接字创建通道,也不可能指定与套接字通道关联的套接字所使用的 SocketImpl 对象。 13 SocketChannel.register(Selector,int);向SocketChannel注册感性趣的事件类型,支持的有:SelectionKey.OP_READ和SelectionKey.WRITE.14 key.isReadable();判断所获取的SelectionKey是否为readable,如果是则意味着有消息流在等待处理。public final boolean isReadable()测试此键的通道是否已准备好进行读取。 调用此方法的形式为 k.isReadable() ,该调用与以下调用的作用完全相同: k.readyOps()&OP_READ!=0如果此键的通道不支持读取操作,则此方法始终返回 false。 返回: 当且仅当 readyOps()&OP_READ 为非零值时才返回 true 15 SocketChannel.read(ByteBuffer)采用SelectionKey中绑定的SocketChannel对象读取消息流。public abstract int read(ByteBufferdst) throws IOException从接口 ReadableByteChannel 复制的描述 将字节序列从此通道中读入给定的缓冲区。 尝试最多从该通道中读取 r 个字节,其中 r 是调用此方法时缓冲区中剩余的字节数,即 dst.remaining()。 假定读取的字节序列长度为 n,其中 0=n=r。此字节序列将被传输到缓冲区中,序列中的第一个字节位于索引 p 处,最后一个字节则位于索引 p+n-1 处,其中 p 是调用此方法时缓冲区的位置。返回时,该缓冲区的位置将等于 p+n;其限制不会更改。 读取操作可能不填充缓冲区,实际上它可能根本不读取任何字节。是否如此执行取决于通道的性质和状态。例如,处于非阻塞模式的套接字通道只能从该套接字的输入缓冲区中读取立即可用的字节;类似地,文件通道只能读取文件中剩余的字节。但是可以保证,如果某个通道处于阻塞模式,并且缓冲区中至少剩余一个字节,则在读取至少一个字节之前将阻塞此方法。 可在任意时间调用此方法。但是如果另一个线程已经在此通道上发起了一个读取操作,则在该操作完成前此方法的调用被阻塞。 指定者: 接口 ReadableByteChannel 中的 read参数: dst - 要向其中传输字节的缓冲区 返回: 读取的字节数,可能为零,如果该通道已到达流的末尾,则返回 -1 16 SocketChannel.write(ByteBuffer);采用SelectKey中绑定的SocketChannel对象输出消息流。public abstract int write(ByteBuffersrc) throws IOException从接口 WritableByteChannel 复制的描述 将字节序列从给定的缓冲区中写入此通道。 尝试最多向该通道中写入 r 个字节,其中 r 是调用此方法时缓冲区中剩余的字节数,即 src.remaining()。 假定写入长度为 n 的字节序列,其中 0=n=r。从缓冲区的索引 p 处开始传输该字节,其中 p 是调用此方法时该缓冲区的位置;最后写入的字节索引是 p+n-1。返回时,该缓冲区的位置将等于 p+n;其限制不会更改。 除非另行指定,否则仅在写入所有请求的 r 个字节后 write 操作才会返回。有些类型的通道(取决于它们的状态)可能仅写入某些字节或者可能根本不写入。例如,处于非阻塞模式的套接字通道只能写入该套接字输出缓冲区中的字节。 可在任意时间调用此方法。但是如果另一个线程已经在此通道上发起了一个写入操作,则在该操作完成前此方法的调用被阻塞。 指定者: 接口 WritableByteChannel 中的 write参数: src - 要从中获取字节的缓冲区 返回: 写入的字节数,可能为零 客户端:1 SocketChannel.open();打开SocketChannel.public static SocketChannel open()throws IOException打开套接字通道。 通过调用系统级默认 SelectorProvider 对象的 openSocketChannel 方法来创建新的通道。 返回: 新的套接字通道 2 SocketChannel.configureBlocking(false);将SocketChannel配置为非阻塞模式;3 SocketChannel.connect();连接到指定的目标地址。public abstract boolean connect(SocketAddressremote) throws IOException连接此通道的套接字。 如果此通道处于非阻塞模式,则调用此方法会发起一个非阻塞连接操作。如果立即建立连接(使用本地连接时就是如此),则此方法返回 true。否则此方法返回 false,并且必须在以后通过调用 finishConnect 方法来完成该连接操作。 如果此通道处于阻塞模式,则在建立连接或发生 I/O 错误之前将阻塞此方法的调用。 此方法执行与 Socket 类完全相同的安全检查。也就是说,如果已安装了安全管理器,则此方法验证其 checkConnect 方法是否允许连接到给定远程端点的地址和端口号。 可在任意时间调用此方法。如果正在调用此方法时在此通道上调用读取或写入操作,则在此调用完成前将首先阻塞该操作。如果试图发起连接但失败了,也就是说如果调用此方法抛出经过检查的异常,则关闭此通道。 参数: remote - 与此通道连接的远程地址 返回: 如果已建立连接,则返回 true,如果此通道处于非阻塞模式并且正在进行连接操作,则返回 false 4 Selector.open();打开Selector();public static Selector open()throws IOException打开一个选择器。 通过调用系统级默认 SelectorProvider 对象的 openSelector 方法来创建新的选择器。 返回: 新的选择器 5 SocketChannel.register(Selector,int);向SocketChannel中注册Selector对象以及所感兴趣的连接事件(例如连接建立,连接可读以及连接可写等)6 While(true)遍历7 Selector.select();从Selector中获取是否有可读的Key的信息。8 for(SelectionKey key:selector.selectedKeys()遍历selector中所有的key.9 selectionKey.isConnectable();判断SelectionKey是否为连接建立的事件。public final boolean isConnectable()测试此键的通道是否已完成其套接字连接操作。 调用此方法的形式为 k.isConnectable() ,该调用与以下调用的作用完全相同: k.readyOps()&OP_CONNECT!=0如果此键的通道不支持套接字连接操作,则此方法始终返回 false。 返回: 当且仅当 readyOps()&OP_CONNECT 为非零值时才返回 true 10 SelectionKey.channel();从SelectionKey中获取其对应的SocketChannel.public abstract SelectableChannel channel()返回为之创建此键的通道。即使已取消该键,此方法仍继续返回通道。 返回: 此键的通道11 SocketChannel.finishConnect();完成连接的建立(TCP/IP的三次握手)public abs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政工科工作汇报
- 窃血综合征的护理
- 2026届浙江省杭州西湖区四校联考英语九年级第一学期期末学业水平测试模拟试题含解析
- 大健康员工培训方案
- 2026届安徽省淮南市潘集区化学九年级第一学期期中联考模拟试题含解析
- 2026届福建省各地英语九上期末监测模拟试题含解析
- 2026届山东省德州市陵城区化学九年级第一学期期末质量检测模拟试题含解析
- 2026届江苏省南京鼓楼区化学九年级第一学期期中质量检测模拟试题含解析
- 湖北省武汉市蔡甸区誉恒联盟2026届九年级英语第一学期期末预测试题含解析
- 2025年急救抢救烧伤病情处理策略及答案解析
- 医院培训课件:《精神科暴力特征及实战技巧》
- 2025年临床执业医师考试《第一单元》新版真题卷(含答案)
- 雅砻江公司招聘笔试题库2025
- T/CACE 0128-2024一次性原竹餐具通用技术要求
- 湖北省2025届高三数学上学期9月起点考试含答案
- 国际压力性损伤-溃疡预防和治疗临床指南(2025年版)解读课件
- 《优化教学策略:打造卓越课件的秘诀》课件
- 猪蹄供货协议书范本
- 2025年数学新课标《义务教育数学课程标准(2025年版)》解读
- 《拍摄校园微视频》教学课件-2024-2025学年冀美版(2024)初中美术七年级下册
- 抗美援朝“铭记历史迎接挑战”-第11年迎回在韩中国人民志愿军烈士遗骸主题班会课件
评论
0/150
提交评论