一、回传协议接口和 UDP : :
1. : :
استيراد java.nio.channels.selectionKey ؛ استيراد java.io.ioException ؛ الواجهة العامة echoprotocol {void HandleAccept (مفتاح SelecteKey) يلقي ioException ؛ باطل معالج (مفتاح تحديد مفتاح الاختيار) يلقي ioException ؛ void المعدات (مفتاح Selectekey) يلقي 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: 1.5 ؛"> {span> private static int echomax = 255 ؛ . Bytebuffer Buffer = bytebuffer.allocate (echomax) ؛ } public void HandleAccept (SelecteKey Key) يلقي IoException {} public void handlead (SelecteKey Key) يلقي ioException {datagramchannel channel = (datagramchannel) key.channel () ؛ clientRecord clntrec = (clientRecord) key.attachment () ؛ clntrec.buffer.clear () ؛ // إعداد المخزن المؤقت لاستلام clntrec.clientaddress = channel.receive (clntrec.buffer) ؛ if (clntrec.clientaddress! = null) {// هل تلقينا شيئًا؟ // سجل الكتابة مع key.InterestOps (selectekey.op_write) ؛ }} public void wandwrite (Selectekey Key) يلقي ioException {datagramchannel channel = (datagramchannel) key.channel () ؛ clientRecord clntrec = (clientRecord) key.attachment () ؛ clntrec.buffer.flip () ؛ // إعداد العازلة لإرسال int bytessent = channel.send (clntrec.buffer ، clntrec.clientaddress) ؛ if (bytessent! = 0) {// buffer مكتوب تماما؟ // لم يعد مهتمًا بـ key.InterestOps (selectekey.op_read) ؛ }}}二、 nio udp 客户端 :
استيراد java.net.inetsocketaddress ؛ استيراد java.net.socketException ؛ استيراد java.nio.bytebuffer ؛ استيراد java.nio.channels.datagramchannel ؛ الطبقة العامة udpechoclientnonblocking {private static final int timeout = 3000 ؛ // إعادة إيداع المهلة (milliseconds) الفاتن النهائي الثابتة int = 255 ؛ // Maximum Retransmissions Public Static Void Main (String args []) يرمي استثناء {// تحويل سلسلة الإدخال إلى Bytes باستخدام Byte charset الافتراضي [] Bytestosend = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZEZYZ () ؛) ؛ // قم بإنشاء قناة وتعيينها على datagramchannel datagramchannel = datagramchannel.open () ؛ datagramchannel.configureBlocking (false) ؛ datagramchannel.socket (). setSotimeout (timeout) ؛ bytebuffer writebuf = bytebuffer.wrap (bytestosend) ؛ bytebuffer readBuf = bytebuffer.allocate (maxtries) ؛ datagramchannel = datagramchannel.connect (inetsocketaddress جديد ("127.0.0.1" ، 5500)) ؛ int totalBytesrcvd = 0 ؛ // إجمالي البايتات المستلمة حتى الآن int bytesrcvd ؛ // bytes المستلمة في آخر قراءة بينما (TotalBytesrcvd <bytestosend.length) {if (trintbuf.hasRemaining ()) {datagramchannel.write (writebuf) ؛ } if ((bytesrcvd = datagramChannel.Read (readBuf)) == -1) {رمي socketException ("الاتصال مغلق قبل الأوان") ؛ } totalBytesrcvd += bytesrcvd ؛ system.out.print (".") ؛ // افعل شيئًا آخر} system.out.println ("تم استلامه:" + سلسلة جديدة (readbuf.array () ، 0 ، TotalBytesrcvd)) ؛ datagramchannel.close () ؛ }}三、 nio udp 服务端 :
استيراد java.io.ioException ؛ استيراد java.net.inetsocketaddress ؛ استيراد java.nio.channels.*؛ استيراد java.util.iterator ؛ الطبقة العامة udpechoserverselector {private static final timeout = 3000 ؛ . محدد المحدد = celector.open () ؛ DatagramChannel Channel = datagramchannel.open () ؛ Channel.ConfigureBlocking (false) ؛ channel.socket (). bind (new inetsocketaddress (5500)) ؛ channel.register (selector ، selectekey.op_read ، udpechoselectorprotocol.clientRecord ()) ؛ udpechoselectorprotocol echoselectorprotocol = جديد udpechoselectorprotocol () ؛ بينما (صحيح) {// قم بتشغيل إلى الأبد ، استلام وتردد بيانات البيانات // انتظر المهمة أو حتى تنتهي مهلة المهلة إذا (concector.select (timeout) == 0) {system.out.print (".") ؛ يكمل؛ } // احصل على iterator على مجموعة من المفاتيح مع I/O لمعالجة ITerator <SelecteKey> keyiter = selector.selectedkeys (). iterator () ؛ بينما (keyiter.hasnext ()) {selectekey key = keyiter.next () ؛ // المفتاح هو Bit Mask // قناة مقبس العميل لديها بيانات معلقة؟ if (key.isReadable ()) echoselectorprotocol.handleread (key) ؛ // قناة مقبس العميل متاحة للكتابة و // المفتاح صالح (أي ، القناة غير مغلقة). if (key.isvalid () && key.iswitable ()) echoselectorprotocol.handlewrite (مفتاح) ؛ keyiter.remove () ؛ }}}}以上就是本文的全部内容 , 查看更多 java 的语法 , : : 《التفكير في java 中文手册》、《 jdk 1.7 参考手册官方英文版》、《 jdk 1.6 api java 中文参考手册》、《 jdk 1.5 api java 中文参考手册》 , 也希望大家多多支持武林网。