快速业务通道

运用异步输入输出流编写Socket进程通信 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
ket) key.attachment();           SocketChannel channel = (SocketChannel) socket.getChannel();            this.writeToChannel( channel,"This is from server!");         }       }     }   }    //对通道的写操作   public void writeToChannel( SocketChannel channel, String message ) throws IOException {      ByteBuffer buf = ByteBuffer.wrap( message.getBytes() );      int nbytes = channel.write( buf );   }    //对通道的读操 作   public void readFromChannel( SocketChannel channel, ClientChInstance clientInstance )   throws IOException, InterruptedException {     ByteBuffer byteBuffer = ByteBuffer.allocate( BUFFERSIZE );     int nbytes = channel.read( byteBuffer );     byteBuffer.flip();      String result = this.decode( byteBuffer );     //当客户端 发出”@exit”退出命令时,关闭其通道     if ( result.indexOf( "@exit" ) >= 0 ) {        channel.close();     }     else {          clientInstance.append( result.toString() );          //读入一行完毕,执行相应操作         if ( result.indexOf( "n" ) >= 0 ){          System.out.println("client input"+result);          clientInstance.execute();         }     }   }   //该类封装了怎样对客户端的通道进行操作,具体实现可以 通过重载execute()方法   public class ClientChInstance {      SocketChannel channel;     StringBuffer buffer=new StringBuffer();     public ClientChInstance( SocketChannel channel ) {       this.channel = channel;     }     public void execute() throws IOException {        String message = "This is response after reading from channel! ";       writeToChannel( this.channel, message );       buffer = new StringBuffer();     }      //当一行没有结束时,将当前字窜置于缓冲尾     public void append( String values ) {       buffer.append( values );     }   }   //主程序   public static void main( String[] args ) {     NBlockingServer nbServer = new NBlockingServer(8000);     try {        nbServer.initialize();     } catch ( Exception e ) {        e.printStackTrace();       System.exit( -1 );     }     try {        nbServer.portListening();     }     catch ( Exception e ) {       e.printStackTrace();     }   } }

小结:

从以上程序段可以看出,服 务器端没有引入多余线程就完成了多客户的客户/服务器模式。该程序中使用了 回调模式(CALLBACK),细心的读者应该早就看出来了。需要注意的是,请不要将 原来的输入输出包与新加入的输入输出包混用,因为出于一些原因的考虑,这两 个包并不兼容。即使用通道时请使用缓冲完成输入输出控制。该程序在 Windows2000,J2SE1.4下,用telnet测试成功。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号