服務器端與多客戶端 信息交互_第1頁
服務器端與多客戶端 信息交互_第2頁
服務器端與多客戶端 信息交互_第3頁
服務器端與多客戶端 信息交互_第4頁
服務器端與多客戶端 信息交互_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、10/10HYPERLIN 服務器端: YPELINK ”va代碼 :imot javaio。Exetion; impor.nScktAddress; ipor。everSocket; imoSocket; impra.nio。Byteuffer;mpr jaani.hnnls。SlectionKey; pot java.no。cannelSeec;mport va。io。hanels.ServerocketChanl; importjva。ni。channels。Socethannl;import ja。nio.arstChrse; importjva。til。HasMap; mprt aa

2、.ut。Mp; imortjva.il。St; publi cassNIOSSever privinpor = 888; /解碼buffe 不敗戰(zhàn)神:rivateChase = ChrseorName(gbk); /*接受數(shù)據(jù)緩沖區(qū)/ rte statc ByteBe Bufer= ByteBufer。loate(1024); 發(fā)送數(shù)據(jù)緩沖區(qū)/ privtea ByeBuffrrBfer= ByteBffer。alcate(124); /映射客戶端channe / rive Mp cliensap = n shaSring, ocetC();piv saticSelecto selctor;p

3、ulic NIOSevr(intpot) thsport = ort; r int(); cac (xetin e) eptStackTrace(); privt od it()hwsIExcetion / 啟動YPERINK 服務器端,配置為非阻塞,綁定端口,注冊accep事件 帝尊: *CEP事件:當服務端收到客戶端連接請求時,觸發(fā)該事件 / SeverSocketChann serverSocketCnnl= SeverSockethannelpe(); serverSockethan.crecing(flse); SvrSoce serveoke seveSckChannel。scke

4、t(); servecetbind(e IetockAddres(port)); eeco = Selecto。open();sererSocetCnnel.rgiste(selto, SeltioKy.AEP); ytemou.pintln(ver sat on port:”+pot); /* 服務器端輪詢監(jiān)聽,select方法會一直阻塞直到有相關事件發(fā)生或超時 *天驕無雙:private idlite()hile (true) ry seer.slect();返回值為本次觸發(fā)的事件數(shù) SeSlecionKey lectinKy = elector.slectedy(); for(Selct

5、inKy k: selectinKes) hndle(key);seletoKeysclea();/清除處理過的事件 ach (Expo ) epintStacTce(); ek; * 處理不同的事件 */ prve vid handle(eectinKey selectiney) throws OException ervercketChanel srver = nul; Skannl clent nll; StrirceieText=nul; int count=0; (seletnKey.isAcptable()) 客戶端請求連接事件 人皇: * seversockt為該客戶端建立cet

6、連接,將此cet注冊RA事件,監(jiān)聽客戶端輸入 RE事件:當客戶端發(fā)來數(shù)據(jù),并已被服務器控制線程正確讀取時,觸發(fā)該事件 */ svr (SreSocetnne) eletonKe.hae(); cliet = server。acpt();cliet.configureBoking(alse); clietreste(sector, SelectnKeyP_ED); ele f (slecinKeiReaabe() / ED事件,收到客戶端發(fā)送數(shù)據(jù),讀取數(shù)據(jù)后繼續(xù)注冊監(jiān)聽客戶端 clint = (SckeCanne)ectinKy。channel(); rBfferlear(); out = nt

7、。read(ufe); i(u ) ruffer.fli(); receieex = tring.aueOf(c.do(rBufer)。ray();St。ut。prin(clet.torin():reciveext); dispatc(clet,recivet); lient(SoketChannel) seectionKey.chann(); clitregistr(lectr, SeletionKey。O_RED);斬龍: / 把當前客戶端信息 推送到其他客戶端 / priate od isptch(SokeCannl clent,tring ifo) hrows OException S

8、oke s = clen。soc(); Sin nae +s.getInAde().toString()。sbtrig(1)+”:”Ineger.toHexStrn(clie。hshod())+; f(!clintsap.sEmty())for(ap。EntryString,oetChanlent : clentsapntrySet()) Sokethann te = entrygetValue();f(!clint.equals(temp)) sBuffer。cla(); Bufr。pu((ame+:”+info)。getByt(); Buffer。flip();輸出到通道 奧術神座: te

9、。wte(suffer); clintappt(nae, ciet); publcsttic void mai(tring ag)rowsIOExepton NIOSrerrve =new IOSServe(77); ervr.isen(); 客戶端,可運行啟動多個: HERLINK ava代碼: pr java.iBuferedReader; import java。io.IOExeption; import jaa.。nputStreamRade; impor。InetSokeAddes; iportj。ni.BeBer; imor jav。nio.cannels。SelctionKey;

10、 imprt jano.chanels.Selectr;impo javn。hnels.ockeCannel;ipor va。uiDa; imo java.uil。Set; ul casNIOien 發(fā)送數(shù)據(jù)緩沖區(qū)/ 飛速小說:privattati ByteufrsBuffer =ByteBufer.aoct(14); /*接受數(shù)據(jù)緩沖區(qū)/ rivte static yeBuffr Buffer yteBuffer。aloate(102); 服務器端地址/ pivate netScetAddrsSERVER; prv staic Selectelect;prvate satic oketCha

11、nl clien; privae stati Srng recivText; private saticSin enText; privatestatic intcoun0;publi NOCliet(t prt) RV= e InetocetAdrs(localo, pt);ini(); publi vod init() y * 客戶端向服務器端發(fā)起建立連接請求 / SockeChan socetChanl= SocketChane。opn();ocetChannelconfigureBocki(ale); selector = eltor.opn(); ocktChannel.rster(

12、seector,lectoneyOCONNCT);soketannel.onect(SRVR); /* *輪詢監(jiān)聽客戶端上注冊事件的發(fā)生 天驕無雙:/ whil(true) selec.elct(); SetSlectoneykeSt = seectorselectKes();or(finl eletiKyey :yS) andle(ky); ; kyStclear(); cach (Exepion ) e。pintStakrace(); publc stacoimain(Srin args)thrwIxetion Nlient client = eNOClet(77); rivte void

13、 handl(SelionKeyslectinKe) rows IExeption if (sltonK。sConnectble()) /* 連接建立事件,已成功連接至服務器 */client= (SokChannl) sectioney。chnel(); if (clen。isConnctionPndin() cient.finishCnct();Syeot.itln(connct sucess !”); sBuffrclear(); sBffer.put((e at()。toocaleSrng() onnected!).gytes()); Buffr.lip(); lit。rite(sBu

14、ffer);/發(fā)送信息至服務器 /原文來自站長網(wǎng) 天驕無雙:* 啟動線程一直監(jiān)聽客戶端輸入,有信心輸入則發(fā)往服務器端 因為輸入流是阻塞的,所以單獨線程監(jiān)聽/ ew head()Oeride publc void ru() hil(true) ty Buffercler();InputStreamReadeit = new IuramReade(yste。);ffeReade br= newuffreader(input); sendText = br.readLine(); /* 未注冊WRIE事件,因為大部分時間cha都是可以寫的*ufr。put(senText.geByts(); sBufr.flip(); cliet。wre(suffer); catch(IEcepie) e.priStacae(); break; ; 。stat(); /注冊讀事件 cliet.reter(eleor, eletiney_EAD); ee i (electiony.isReadabe()) / *讀事件觸發(fā) 九星天辰訣: 有從服務器端發(fā)送過來的信息,讀取輸出到屏幕上后,繼續(xù)注冊讀事件 * 監(jiān)聽服

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論