欢迎来到天天文库
浏览记录
ID:38198151
大小:24.54 KB
页数:7页
时间:2019-06-07
《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
此文档下载收益归作者所有