生活随笔
收集整理的這篇文章主要介紹了
xSocket 通讯框架 demo
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
xSocket是一個輕量級的基于nio的服務器框架用于開發高性能、可擴展、多線程的服務器。該框架封裝了線程處理、異步讀/寫等方面。
http://www.xsocket.org/
API:
http://xsocket.sourceforge.net/core/apidocs/2_1/index.html
http://xsocket.sourceforge.net/core/apidocs/2_1_1/index.html
下載:http://download.csdn.net/source/593929
用xSocket做了個服務端,客戶端用開始的flex做的那個聊天室
demo代碼
Main.java
package?chat;import?org.xsocket.connection.*;public?class?Main?{????????private?static?final?int?PORT?=?8014;????public?static?void?main(String[]?args)?throws?Exception?{???????IServer?srv?=?new?Server(PORT,?new?EchoHandler());??????????try{??????????srv.start();?????System.out.println("服務器"?+?srv.getLocalAddress()?+":"+PORT);?????}catch(Exception?e){????????System.out.println(e);????}????????}}
?
EchoHandler.java
package?chat;import?org.xsocket.connection.*;import?org.xsocket.*;?import?java.nio.*;import?java.io.*;import?java.util.*;class?EchoHandler?implements?IDataHandler,IConnectHandler,IDisconnectHandler??{????public?static?BManager?bMan=new?BManager();????public?static?Map<INonBlockingConnection,String>?clientList?=?new?HashMap<INonBlockingConnection,String>();?????????public?boolean?onConnect(INonBlockingConnection?nbc)?throws?IOException?{????????????????System.out.println("onConnect?"?+?nbc.getRemoteAddress()+":"+nbc.getRemotePort());????????return?true;????}????????public?boolean?onDisconnect(INonBlockingConnection?nbc)?throws?IOException?{????????????????System.out.println("onDisconnect?"?+?nbc.getRemoteAddress()+":"+nbc.getRemotePort());????????bMan.remove(nbc);????????if(clientList.containsKey(nbc))????????{????????????bMan.sendToAll("22"+clientList.get(nbc)+"離開了...");????????????clientList.remove(nbc);????????????funList(clientList);????????????????????????????????}????????bMan.sendClientInfo();????????????????return?true;????}??public?boolean?onData(INonBlockingConnection?connection)????????????throws?IOException,????????????BufferUnderflowException,????????????MaxReadSizeExceededException?{??????????????????????String?cmd?=?connection.readStringByDelimiter("/n","utf8");??????System.out.println("Get?Data?"?+?cmd);??????if(cmd.equals("<policy-file-request/>/0"))??????{?????????String?xml?=?"<cross-domain-policy>";?????????xml?=?xml?+?"<site-control?permitted-cross-domain-policies=/"all/"/>";?????????xml?=?xml?+?"<allow-access-from?domain=/"*/"?to-ports=/"8014/"?/>";?????????xml?=?xml?+?"</cross-domain-policy>";???????????????????connection.write(xml+?"/0");???????}?????????else?{????????????String?str=cmd.substring(0,?2);??????int?a=Integer.parseInt(str);??????String[]?arrMsg=cmd.split("--");????????switch(a)????????{????????case?11?:????????????String?strName=cmd.substring(2);????????????cmd="22"+strName+"?login";????????????System.out.println(cmd);????????????????????bMan.add(connection);????????????clientList.put(connection,strName);????????????bMan.sendToAll(cmd);????????????funList(clientList);????????????bMan.sendClientInfo();?????????????break;????????case?22:????????????????????????????????cmd=arrMsg[0]+arrMsg[1]+"?say:"+arrMsg[2];????????????????????bMan.sendToAll(cmd);????????????System.out.println("公聊"+cmd);????????????break;????????case?33:????????????????????????????if(arrMsg[1].equals("所有人"))????????????????????????????{????????????????????????????????cmd=arrMsg[2]+"說:"+arrMsg[3];????????????????????????????????bMan.sendToAll("22"+cmd);????????????????????????????}else????????????????????????????{????????????????????????????????INonBlockingConnection?socketOne;????????????????????????????????System.out.println("私聊");????????????????????????????????Set?set?=?clientList.keySet();????????????????????????????????Iterator?it?=?set.iterator();????????????????????????????????while?(it.hasNext())?{??????????????????????????????????????Object?ok=it.next();????????????????????????????????????Object?ov=clientList.get(ok);????????????????????????????????????if(ov.equals(arrMsg[1]))????????????????????????????????????{????????????????????????????????????????socketOne=(INonBlockingConnection)ok;????????????????????????????????????????bMan.sendToONE(socketOne,"22(悄悄話)"+arrMsg[2]+"對你說:"+arrMsg[3]);????????????????????????????????????}else?if(ov.equals(arrMsg[2]))????????????????????????????????????{????????????????????????????????????????socketOne=(INonBlockingConnection)ok;????????????????????????????????????????bMan.sendToONE(socketOne,"22(悄悄話)你對"+arrMsg[1]+"說:"+arrMsg[3]);????????????????????????????????????}????????????????????????????????}????????????????????????????}????????????????????????????????????????????????????????break;????????????????????}??????}??????????return?true;???}????void?funList(Map?clientList)?????{????????String?strList="";????????Set?set?=?clientList.keySet();????????????Iterator?it?=?set.iterator();????????????while?(it.hasNext())?{????????????strList+="--";????????????strList+=clientList.get(it.next());????????}????????bMan.sendToAll("11"+strList);????}}
管理客戶端類
BManager.java
package?chat;import?java.io.*;import?java.util.*;import?org.xsocket.connection.*;class?BManager?extends?Vector{????BManager?(){}????void?add(INonBlockingConnection?sock)????{????????super.add(sock);????}????void?remove(INonBlockingConnection?sock)????{????????super.remove(sock);????}????synchronized?void?sendToAll(String?msg)????{????????????INonBlockingConnection?sock;????????System.out.println("發送"+msg+"/"+size());????????for(int?i=0;i<size();i++)????????{????????????sock=(INonBlockingConnection)elementAt(i);????????????try????????????{?????????????sock.write(msg);????????????????System.out.println("發送"+sock.getRemoteAddress()+":"+sock.getRemotePort()+"|"+msg);????????????????????????}catch(Exception?ie){}????????????????}????}????synchronized?void?sendToONE(INonBlockingConnection?socket,String?msg)????{????????????INonBlockingConnection?sock;????????for(int?i=0;i<size();i++)????????{????????????sock=(INonBlockingConnection)elementAt(i);????????????if(socket==sock)????????????{????????????????????????????????try????????????????{????????????????????sock.write(msg);????????????????????????????????}catch(Exception?ie){}????????????????????????????}????????}????????????}????synchronized?void?sendClientInfo()????{????????String?info="44當前聊天人數:"+size();????????????????sendToAll(info);????}}
總結
以上是生活随笔為你收集整理的xSocket 通讯框架 demo的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。