java基于nio的socket通信

java基于nio的socket通信

ID:38198151

大小:24.54 KB

页数:7页

时间:2019-06-07

java基于nio的socket通信_第1页
java基于nio的socket通信_第2页
java基于nio的socket通信_第3页
java基于nio的socket通信_第4页
java基于nio的socket通信_第5页
资源描述:

《java基于nio的socket通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、JAVA的NIO,各种介绍都是显示如何如何的好,别的不知道,nio的socket确实写得不少,个人感觉在nio下的socket就是实现了异步通信而已,只是介绍过于复杂,当初第一次接触,真是被吓住了。但是呢,这里面的弊端也没有看到谁出来说一下,真是的。话说前几天同学让帮忙写一个类似聊天室的东西,但是前几天沉迷wp的主题设计去了,完全忘记了,今天终于想起来。于是开写,用nio,因为最近对这个比较熟。首先是服务端代码(当然了,这只是类似教学程序的东西,写得可能有戏粗糙)ViewCode[JAVA5]Copytoclip

2、boardpublicvoidservice(){while(true){try{System.err.println("Service");serverChannel=ServerSocketChannel.open();selector=Selector.open();isa=newInetSocketAddress(8807);//只绑定端口8807serverChannel.socket().bind(isa);serverChannel.configureBlocking(false);System.o

3、ut.println("Server成功开启!");//}serverChannel.register(selector,SelectionKey.OP_ACCEPT);while(selector.select()<0){//获得IO准备就绪的channel数量iter=selector.selectedKeys().iterator();while(iter.hasNext()){SelectionKeykey=iter.next();iter.remove();//从selector上的已选择Key集中删除

4、正在处理的SelectionKeyif(key.isAcceptable()){//判断是否有新的连接到达channel=serverChannel.accept();channel.configureBlocking(false).register(selector,SelectionKey.OP_READ).attach(newClientConnection(this,channel));key.interestOps(SelectionKey.OP_ACCEPT);System.err.println("

5、NewConnection";);}elseif(key.isReadable()){channel=(SocketChannel)key.channel();ClientConnectionconnection=(ClientConnection)channel.keyFor(selector).attachment();if(connection==null

6、

7、connection.isClosed()){key.cancel();continue;}try{buffer.clear();intlen=0;i

8、f((len=channel.read(buffer))!=-1){packet=newbyte[len];buffer.flip();buffer.get(packet);//System.err.println("channel.read(buffer)"+buffer.toString());tempBuffString=newString(packet,"UTF-8");if(tempBuffString==null

9、

10、tempBuffString.trim().length()<=0)contin

11、ue;System.out.println("ReceiveMessage:"+tempBuffString);Stringid=tempBuffString.substring(1,tempBuffString.indexOf(":"));switch(Integer.parseInt(tempBuffString.charAt(0)+"")){case1:{//登陆if(!clientMap.containsKey(id)){connection.writePacket(ok);connection.setC

12、lientId(id);clientLogin(connection);}else{connection.writePacket(fail);}};break;//case2:{//clientMap.remove(id);//clientLogout(connection);//};break;case4:{//点对点消息clientMap.get(id).writeP

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。