UDP::
1.接口:
導入java.nio.channels.selectionkey;導入java.io.ioexception;公共接口Echoprotocol {void handleaccept(selectionkey鍵)拋出ioexception; void handleread(selectionkey鍵)拋出ioexception; void handlewrite(selectionkey鍵)拋出ioexception; }2.實現::
導入java.net.socketAddress;導入Java.nio.Channels。 *;導入Java.nio.Bytebuffer;導入java.io.ioexception;公共類UdpechoselectorProtocol實施<span style =“ font-size:1em; line-height:1.5;“> echoprotocol </span> <span style =” font-size:1em; line-height; line-height:1.5;“> {</> {</> {</> {</> private static static static final int echomax = 255; //回波數據報靜態類客戶端{public socketAddress clientaddress; public bytebuffer buffer = bytebuffer.allocate(echomax); } public void handleaccept(selectionkey鍵)拋出ioexception {} public void handleread(selectionkey鍵)拋出ioexception {datagramChannel channel =(datagramChannel)key.channel(); clientRecord clntrec =(clientRecord)key.attachment(); clntrec.buffer.clear(); //準備接收clntrec.clientaddress = Channel.receive(clntrec.buffer)的緩衝區; if(clntrec.clientaddress!= null){//我們收到了一些東西嗎? //註冊在selector key.interestops(selectionkey.op_write)上寫入; }} public void handlewrite(selectionkey鍵)拋出ioexception {datagramChannel channel =(datagramChannel)key.channel(); clientRecord clntrec =(clientRecord)key.attachment(); clntrec.buffer.flip(); //準備用於發送int bytessent = channel.send的緩衝區(clntrec.buffer,clntrec.clientaddress);如果(bytessent!= 0){//緩衝區完全編寫? //不再對writes key.interestops(selectionkey.op_read)感興趣; }}}}二、 nio udp::
導入java.net.inetsocketaddress;導入java.net.socketException;導入Java.nio.Bytebuffer;導入Java.nio.Channels.DatagramChannel;公共類Udpechoclientnonblocking {私有靜態最終int超時= 3000; //重新啟動超時(毫秒)私有靜態最終int maxtries = 255; //使用默認的charset byte [] bytestosend =“ 0123456789ABCDEFGHIJKLMNOPQRMNOPQRSTUVWXYZ” .getBytes()()()()(),最大重新轉載式公共靜態void main(String args [])拋出異常{//將輸入字符串轉換為字節。 //創建頻道並將設置為非塊datagramChannel datagramChannel = datagramChannel.open(); datagramChannel.configureBlocking(false); datagramChannel.socket()。 setSotimeout(timeout); bytebuffer writebuf = bytebuffer.wrap(bytestosend); bytebuffer dechbuf = bytebuffer.allocate(maxtries); datagramChannel = datagramChannel.connect(new InetSocketAddress(“ 127.0.0.1”,5500)); int totalbytesrcvd = 0; //到目前為止收到的總字節int bytesrcvd; //在上次讀取中收到的字節(totalBytesrcvd <bytestosend.length){if(writebuf.hasremaining()){datagramChannel.write(writebuf); } if(((bytesrcvd = datagramChannel.read(readbuf)))== -1){投擲new SocketException(“連接過早關閉”); } totalbytesrcvd += bytesrcvd; system.out.print(“。”); //做其他事情} system.out.println(“接收:” + new String(dectBuf.Array(),0,totalbytesrcvd)); datagramChannel.close(); }}}三、 nio udp::
導入java.io.ioexception;導入java.net.inetsocketaddress;導入Java.nio.Channels。 *;導入java.util.iterator;公共類udpechoserverselector {私有靜態最終int timout = 3000; //等待超時(毫秒)public static void main(string [] args)拋出ioexception {//創建一個選擇器以多路復用客戶端連接。選擇器selector = selector.open(); datagramChannel Channel = datagramChannel.open(); channel.configureblocking(false); channel.socket()。綁定(new InetSocketAddress(5500)); Channel.Register(selector,selectionKey.op_read,新的udpechoselectorprotocol.clientrecord()); udpechoselectorProtocol echoselectorProtocol =新的udpechoselectorProtocol(); while(true){//永遠運行,接收和迴聲數據報//等待任務或直到超時到期if(selector.select(timeout)== 0){system.out.out.print(“。”);繼續; } //用I/O在鍵上獲取迭代器以處理iTerator <SelectionKey> keyiter = selector.selectedkeys()。 iterator(); while(keyiter.hasnext()){selectionkey key = keyiter.next(); //鍵是bit mask //客戶端套接字通道有待處理的數據嗎? if(key.isradable())echoselectorProtocol.handleread(key); //客戶端套接字通道可用於編寫,//鍵是有效的(即,頻道未關閉)。 if(key.isvalid()&& key.iswritable())echoselectorProtocol.handleWrite(key); keyiter.remove(); }}}}}以上就是本文的全部內容,java的語法,大家可以關注:《在Java jdk 1.7 參考手冊官方英文版》、《 jdk 1.6 api java jdk jdk jdk jdk jdk 1.5 api java 中文參考手冊》,也希望大家多多支持武林網。 ,也希望大家多多支持武林網。