欢迎来到天天文库
浏览记录
ID:33758071
大小:61.00 KB
页数:10页
时间:2019-02-28
《服务器端与多客户端 信息交互》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、服务器端: Java代码: importjava.io.IOException; importjava.net.InetSocketAddress; importjava.net.ServerSocket; importjava.net.Socket; importjava.nio.ByteBuffer; importjava.nio.channels.SelectionKey; importjava.nio.channels.Selector; importjava.nio.chan
2、nels.ServerSocketChannel; importjava.nio.channels.SocketChannel; importjava.nio.charset.Charset; importjava.util.HashMap; importjava.util.Map; importjava.util.Set; publicclassNIOSServer{ privateintport=8888; //解码buffer不败战神:www.qiuyeyu.com privat
3、eCharsetcs=Charset.forName("gbk"); /*接受数据缓冲区*/ privatestaticByteBuffersBuffer=ByteBuffer.allocate(1024); /*发送数据缓冲区*/ privatestaticByteBufferrBuffer=ByteBuffer.allocate(1024); /*映射客户端channel*/ privateMapclientsMap=newHashMap4、ring,SocketChannel>(); privatestaticSelectorselector; publicNIOSServer(intport){ this.port=port; try{ init(); }catch(Exceptione){ e.printStackTrace(); } } privatevoidinit()throwsIOException{ /* *启动服务器端,配置为非阻塞,绑定端口,注册accept事件帝尊:www.dizun.org 5、*ACCEPT事件:当服务端收到客户端连接请求时,触发该事件 */ ServerSocketChannelserverSocketChannel=ServerSocketChannel.open(); serverSocketChannel.configureBlocking(false); ServerSocketserverSocket=serverSocketChannel.socket(); serverSocket.bind(newInetSocketAddress(port)); 6、 selector=Selector.open(); serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT); System.out.println("serverstartonport:"+port); } /** *服务器端轮询监听,select方法会一直阻塞直到有相关事件发生或超时 */天骄无双:www.22bl.com privatevoidlisten(){ while(true){ try{ select7、or.select();//返回值为本次触发的事件数 SetselectionKeys=selector.selectedKeys(); for(SelectionKeykey:selectionKeys){ handle(key); } selectionKeys.clear();//清除处理过的事件 }catch(Exceptione){ e.printStackTrace(); break; } } } /** *处理不同的事件 */ pr8、ivatevoidhandle(SelectionKeyselectionKey)throwsIOException{ ServerSocketChannelserver=null; SocketChannelclient=null; StringreceiveText=null; intcount=0; if(selectionKey.isAcceptable()){ /* *客户端请求连接事件人皇:www.renhuang
4、ring,SocketChannel>(); privatestaticSelectorselector; publicNIOSServer(intport){ this.port=port; try{ init(); }catch(Exceptione){ e.printStackTrace(); } } privatevoidinit()throwsIOException{ /* *启动服务器端,配置为非阻塞,绑定端口,注册accept事件帝尊:www.dizun.org
5、*ACCEPT事件:当服务端收到客户端连接请求时,触发该事件 */ ServerSocketChannelserverSocketChannel=ServerSocketChannel.open(); serverSocketChannel.configureBlocking(false); ServerSocketserverSocket=serverSocketChannel.socket(); serverSocket.bind(newInetSocketAddress(port));
6、 selector=Selector.open(); serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT); System.out.println("serverstartonport:"+port); } /** *服务器端轮询监听,select方法会一直阻塞直到有相关事件发生或超时 */天骄无双:www.22bl.com privatevoidlisten(){ while(true){ try{ select
7、or.select();//返回值为本次触发的事件数 SetselectionKeys=selector.selectedKeys(); for(SelectionKeykey:selectionKeys){ handle(key); } selectionKeys.clear();//清除处理过的事件 }catch(Exceptione){ e.printStackTrace(); break; } } } /** *处理不同的事件 */ pr
8、ivatevoidhandle(SelectionKeyselectionKey)throwsIOException{ ServerSocketChannelserver=null; SocketChannelclient=null; StringreceiveText=null; intcount=0; if(selectionKey.isAcceptable()){ /* *客户端请求连接事件人皇:www.renhuang
此文档下载收益归作者所有