生活随笔
收集整理的這篇文章主要介紹了
java ,c# 解决安全沙箱问题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?一朋友問java服務(wù)端如果解決這個(gè)問題,上次只是給出了解決這個(gè)問題的Delphi代碼。
?
flash客戶端在網(wǎng)站上運(yùn)行的時(shí)候,先進(jìn)行Socket連接,然后發(fā)“<policy-file-request/>”信息,即安全策略請求,如果沒有通過安全策略的檢驗(yàn),socket時(shí)連接不成功.
如果安全策略的檢驗(yàn)通過了,socket也會(huì)先斷開,然后在連接一次,這個(gè)時(shí)候一切正常了。
?
現(xiàn)在給出java和C#的代碼
import?java.net.*;import?java.io.*;import?java.util.*;public?class?JavaServer?{????private?static?final?int?PORT?=?8014;????private?ServerSocket?server;????private?BManager?bMan=new?BManager();????Map<Socket,String>?clientList?=?new?HashMap<Socket,String>();????public?JavaServer(){}????void?startServer()????{???????????????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>";???????????????try?{????????????????server=new?ServerSocket(PORT);????????????????System.out.println("服務(wù)器偵聽:"+PORT);????????????????while(true)????????????????{????????????????????????try????????????????????????{????????????????????????????????????????????????????????????????Socket?socket?=?server.accept();????????????????????????????????System.out.println("連接成功......");????????????????????????????????BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf8"));????????????????????????????????PrintWriter?pw?=?new?PrintWriter(socket.getOutputStream());????????????????????????????????????????????????????????????????char[]?by?=?new?char[22];????????????????????????????????br.read(by,0,22);????????????????????????????????String?head?=?new?String(by);????????????????????????????????System.out.println("消息頭:"?+?head?+?":");????????????????????????????????if(head.equals("<policy-file-request/>"))//判斷是不是安全策略請求????????????????????????????????{????????????????????????????????????????pw.print(xml?+?"/0");????????????????????????????????????????pw.flush();????????????????????????????????????????System.out.println("策略:"?+?xml?+?"/0");????????????????????????????????}????????????????????????????????else????????????????????????????????{????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Chat_Thread?thread?=?new?Chat_Thread(socket);????????????????????????????????????????thread.start();????????????????????????????????????????bMan.add(socket);????????????????????????????????????????bMan.sendClientInfo();????????????????????????????????????????String?cmd=head.substring(0,?2);????????????????????????????????????????int?a=Integer.parseInt(cmd);????????????????????????????????????????if?(a==11)????????????????????????????????????????{????????????????????????????????????????String?strName=head.substring(2).trim();????????????????????????????????????????System.out.println(strName+"登陸了");????????????????????????????????????????bMan.sendToAll("22"+strName+"登陸了");????????????????????????????????????????clientList.put(socket,strName);????????????????????????????????????????funList(clientList);????????????????????????????????????????}??????????????????????????????????????????????????????????????????????????????????????????????????????}????????????????????????}????????????????????????catch?(Exception?e)????????????????????????{????????????????????????????????System.out.println("服務(wù)器出現(xiàn)異常!"?+?e?);????????????????????????}????????????????}?????????}catch(Exception?e){????????????System.out.println(e);????????}?????}????????public?static?void?main(String[]?args)?{????????JavaServer?server=new?JavaServer();????????server.startServer();????}????class?Chat_Thread?extends?Thread????{????????Socket?socket;????????private?BufferedReader?reader;????????private?PrintWriter?writer;????????Chat_Thread(Socket?socket)????????{????????????this.socket=socket;????????}????????public?void?run()????????{????????????????????????try????????????{????????????????reader=new?BufferedReader(new?InputStreamReader(socket.getInputStream(),"utf8"));????????????????writer=new?PrintWriter(socket.getOutputStream(),true);????????????????String?msg;????????????????while((msg=reader.readLine())!=null)????????????????{????????????????????System.out.println("get:"+msg);????????????????????String?str=msg.substring(0,?2);????????????????????int?a=Integer.parseInt(str);????????????????????String[]?arrMsg=msg.split("--");????????????????????switch(a)????????????????????{????????????????????????case?11?:????????????????????????????String?strName=msg.substring(2);????????????????????????????System.out.println(strName+"登陸了");????????????????????????????bMan.sendToAll("22"+strName+"登陸了");????????????????????????????clientList.put(this.socket,strName);????????????????????????????funList(clientList);????????????????????????????break;????????????????????????case?22:????????????????????????????System.out.println("公聊");????????????????????????????msg=arrMsg[0]+arrMsg[1]+"說:"+arrMsg[2];????????????????????????????bMan.sendToAll(msg);????????????????????????????break;????????????????????????case?33:????????????????????????????if(arrMsg[1].equals("所有人"))????????????????????????????{????????????????????????????????msg=arrMsg[2]+"說:"+arrMsg[3];????????????????????????????????bMan.sendToAll("22"+msg);????????????????????????????}else????????????????????????????{????????????????????????????????Socket?socketOne=new?Socket();????????????????????????????????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=(Socket)ok;????????????????????????????????????????bMan.sendToONE(socketOne,"22(悄悄話)"+arrMsg[2]+"對你說:"+arrMsg[3]);????????????????????????????????????}else?if(ov.equals(arrMsg[2]))????????????????????????????????????{????????????????????????????????????????socketOne=(Socket)ok;????????????????????????????????????????bMan.sendToONE(socketOne,"22(悄悄話)你對"+arrMsg[1]+"說:"+arrMsg[3]);????????????????????????????????????}????????????????????????????????}????????????????????????????}????????????????????????????????????????????????????????break;????????????????????}????????????????????????????????????}????????????}catch(Exception?e)????????????{????????????????????????????}finally????????????{????????????????try?{????????????????????bMan.remove(socket);????????????????????if(reader?!=null)?reader.close();????????????????????if(writer?!=null)?writer.close();????????????????????if(socket?!=null)?socket.close();????????????????????if(clientList.containsKey(socket))????????????????????{????????????????????????bMan.sendToAll("22"+clientList.get(socket)+"離開了...");????????????????????????clientList.remove(socket);????????????????????????funList(clientList);????????????????????????????????????????????}????????????????????reader=null;????????????????????writer=null;????????????????????socket=null;????????????????????System.out.println("客戶機(jī)離開");????????????????????bMan.sendClientInfo();????????????????}?catch?(Exception?e)?{}????????????}????????????????????}????}????void?funList(Map?clientList)?????{????????String?strList="";????????Set?set?=?clientList.keySet();????????System.out.println(set);????????Iterator?it?=?set.iterator();????????System.out.println(it);????????while?(it.hasNext())?{????????????strList+="--";????????????strList+=clientList.get(it.next());????????}????????bMan.sendToAll("11"+strList);????}}class?BManager?extends?Vector{????BManager?(){}????void?add(Socket?sock)????{????????super.add(sock);????}????void?remove(Socket?sock)????{????????super.remove(sock);????}????synchronized?void?sendToAll(String?msg)????{????????PrintWriter?writer=null;????????Socket?sock;????????for(int?i=0;i<size();i++)????????{????????????sock=(Socket)elementAt(i);????????????try????????????{????????????????writer=new?PrintWriter(sock.getOutputStream(),true);????????????}catch(Exception?ie){}????????????if(writer!=null)writer.println(msg);????????}????}????synchronized?void?sendToONE(Socket?socket,String?msg)????{????????PrintWriter?writer=null;????????Socket?sock;????????for(int?i=0;i<size();i++)????????{????????????sock=(Socket)elementAt(i);????????????if(socket==sock)????????????{????????????????????????????????try????????????????{????????????????????writer=new?PrintWriter(sock.getOutputStream(),true);????????????????}catch(Exception?ie){}????????????????if(writer!=null)writer.println(msg);????????????}????????}????????????}????synchronized?void?sendClientInfo()????{????????String?info="44當(dāng)前聊天人數(shù):"+size();????????System.out.println(info);????????sendToAll(info);????}}
?C#代碼,Delphi代碼
請到http://download.csdn.net/wind520下載
?
總結(jié)
以上是生活随笔為你收集整理的java ,c# 解决安全沙箱问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。