热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java,c#解决安全沙箱问题

一朋友问java服务端如果解决这个问题,上次只是给出了解决这个问题的Delphi代码。flash客户端在网站上运行的时候,先进行Socket连接,然后发“<policy-file-reque

 一朋友问java服务端如果解决这个问题,上次只是给出了解决这个问题的Delphi代码。

 

flash客户端在网站上运行的时候,先进行Socket连接,然后发“”信息,即安全策略请求,如果没有通过安全策略的检验,socket时连接不成功.
如果安全策略的检验通过了,socket也会先断开,然后在连接一次,这个时候一切正常了。

 

现在给出java和C#的代码

  1. /*
  2.  * 自定义的协议 
  3.  * 收到消息: 11开头表示新加入了聊天用户;22开头表示公聊;33开头表示私聊
  4.  * 发送消息:11开头表示更新用户列表;22开头表示发送到屏幕上;44发送在线人数
  5.  * 
  6.  */
  7. import java.net.*;
  8. import java.io.*;
  9. import java.util.*;
  10. public class JavaServer {
  11.     private static final int PORT = 8014;
  12.     private ServerSocket server;
  13.     private BManager bMan=new BManager();
  14.     Map clientList = new HashMap();
  15.     public JavaServer(){}
  16.     void startServer()
  17.     {
  18.                String xml = "";
  19.                 xml = xml + "";
  20.                 xml = xml + "";
  21.                 xml = xml + "";   
  22.             try {
  23.                 server=new ServerSocket(PORT);
  24.                 System.out.println("服务器侦听:"+PORT);
  25.                 while(true)
  26.                 {
  27.                         try
  28.                         {
  29.                                 //新建一个连接
  30.                                 Socket socket = server.accept();
  31.                                 System.out.println("连接成功......");
  32.                                 BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf8"));
  33.                                 PrintWriter pw = new PrintWriter(socket.getOutputStream());
  34.                                 //接收用户名
  35.                                 char[] by = new char[22];
  36.                                 br.read(by,0,22);
  37.                                 String head = new String(by);
  38.                                 System.out.println("消息头:" + head + ":");
  39.                                 if(head.equals(""))//判断是不是安全策略请求
  40.                                 {
  41.                                         pw.print(xml + "/0");
  42.                                         pw.flush();
  43.                                         System.out.println("策略:" + xml + "/0");
  44.                                 }
  45.                                 else
  46.                                 {
  47.                                         
  48.                                         
  49.                                         Chat_Thread thread = new Chat_Thread(socket);
  50.                                         thread.start();
  51.                                         bMan.add(socket);
  52.                                         bMan.sendClientInfo();
  53.                                         String cmd=head.substring(02);//截取第一个字符
  54.                                         int a=Integer.parseInt(cmd);
  55.                                         if (a==11)
  56.                                         {
  57.                                         String strName=head.substring(2).trim();
  58.                                         System.out.println(strName+"登陆了");
  59.                                         bMan.sendToAll("22"+strName+"登陆了");//广播谁登陆了
  60.                                         clientList.put(socket,strName);//加入到HashMap中
  61.                                         funList(clientList);
  62.                                         }                               
  63.                                        
  64.                                 }
  65.                         }
  66.                         catch (Exception e)
  67.                         {
  68.                                 System.out.println("服务器出现异常!" + e );
  69.                         }
  70.                 }
  71.          }catch(Exception e){
  72.             System.out.println(e);
  73.         } 
  74.     }
  75.     
  76.     public static void main(String[] args) {
  77.         JavaServer server=new JavaServer();
  78.         server.startServer();
  79.     }
  80.     class Chat_Thread extends Thread
  81.     {
  82.         Socket socket;
  83.         private BufferedReader reader;
  84.         private PrintWriter writer;
  85.         Chat_Thread(Socket socket)
  86.         {
  87.             this.socket=socket;
  88.         }
  89.         public void run()
  90.         {
  91.             
  92.             try
  93.             {
  94.                 reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf8"));
  95.                 writer=new PrintWriter(socket.getOutputStream(),true);
  96.                 String msg;
  97.                 while((msg=reader.readLine())!=null)
  98.                 {
  99.                     System.out.println("get:"+msg);
  100.                     String str=msg.substring(02);//截取第一个字符
  101.                     int a=Integer.parseInt(str);
  102.                     String[] arrMsg=msg.split("--");
  103.                     switch(a)
  104.                     {
  105.                         case 11 :
  106.                             String strName=msg.substring(2);
  107.                             System.out.println(strName+"登陆了");
  108.                             bMan.sendToAll("22"+strName+"登陆了");//广播谁登陆了
  109.                             clientList.put(this.socket,strName);//加入到HashMap中
  110.                             funList(clientList);
  111.                             break;
  112.                         case 22:
  113.                             System.out.println("公聊");
  114.                             msg=arrMsg[0]+arrMsg[1]+"说:"+arrMsg[2];
  115.                             bMan.sendToAll(msg);
  116.                             break;
  117.                         case 33:
  118.                             if(arrMsg[1].equals("所有人"))
  119.                             {
  120.                                 msg=arrMsg[2]+"说:"+arrMsg[3];
  121.                                 bMan.sendToAll("22"+msg);
  122.                             }else
  123.                             {
  124.                                 Socket socketOne=new Socket();
  125.                                 System.out.println("私聊");
  126.                                 Set set = clientList.keySet();//使用keySet方法获取所有key值
  127.                                 Iterator it = set.iterator();
  128.                                 while (it.hasNext()) {  
  129.                                     Object ok=it.next();
  130.                                     Object ov=clientList.get(ok);
  131.                                     if(ov.equals(arrMsg[1]))//发给对方
  132.                                     {
  133.                                         socketOne=(Socket)ok;
  134.                                         bMan.sendToONE(socketOne,"22(悄悄话)"+arrMsg[2]+"对你说:"+arrMsg[3]);
  135.                                     }else if(ov.equals(arrMsg[2]))//发给自己
  136.                                     {
  137.                                         socketOne=(Socket)ok;
  138.                                         bMan.sendToONE(socketOne,"22(悄悄话)你对"+arrMsg[1]+"说:"+arrMsg[3]);
  139.                                     }
  140.                                 }
  141.                             }
  142.                             
  143.                             break;
  144.                     }
  145.                     //bMan.sendToAll(msg);
  146.                 }
  147.             }catch(Exception e)
  148.             {
  149.                 
  150.             }finally
  151.             {
  152.                 try {
  153.                     bMan.remove(socket);
  154.                     if(reader !=null) reader.close();
  155.                     if(writer !=null) writer.close();
  156.                     if(socket !=null) socket.close();
  157.                     if(clientList.containsKey(socket))
  158.                     {
  159.                         bMan.sendToAll("22"+clientList.get(socket)+"离开了...");
  160.                         clientList.remove(socket);
  161.                         funList(clientList);
  162.                         
  163.                     }
  164.                     reader=null;
  165.                     writer=null;
  166.                     socket=null;
  167.                     System.out.println("客户机离开");
  168.                     bMan.sendClientInfo();
  169.                 } catch (Exception e) {}
  170.             }
  171.             
  172.         }
  173.     }
  174.     void funList(Map clientList) // 广播在线列表
  175.     {
  176.         String strList="";//在线列表
  177.         Set set = clientList.keySet();//使用keySet方法获取所有key值
  178.         System.out.println(set);
  179.         Iterator it = set.iterator();
  180.         System.out.println(it);
  181.         while (it.hasNext()) {//把用户名称发给在线所有客户端  
  182.             strList+="--";
  183.             strList+=clientList.get(it.next());
  184.         }
  185.         bMan.sendToAll("11"+strList);
  186.     }
  187. }
  188. class BManager extends Vector
  189. {
  190.     BManager (){}
  191.     void add(Socket sock)
  192.     {
  193.         super.add(sock);
  194.     }
  195.     void remove(Socket sock)
  196.     {
  197.         super.remove(sock);
  198.     }
  199.     synchronized void sendToAll(String msg)
  200.     {
  201.         PrintWriter writer=null;
  202.         Socket sock;
  203.         for(int i=0;i
  204.         {
  205.             sock=(Socket)elementAt(i);
  206.             try
  207.             {
  208.                 writer=new PrintWriter(sock.getOutputStream(),true);
  209.             }catch(Exception ie){}
  210.             if(writer!=null)writer.println(msg);
  211.         }
  212.     }
  213.     synchronized void sendToONE(Socket socket,String msg)
  214.     {
  215.         PrintWriter writer=null;
  216.         Socket sock;
  217.         for(int i=0;i
  218.         {
  219.             sock=(Socket)elementAt(i);
  220.             if(socket==sock)
  221.             {
  222.                 
  223.                 try
  224.                 {
  225.                     writer=new PrintWriter(sock.getOutputStream(),true);
  226.                 }catch(Exception ie){}
  227.                 if(writer!=null)writer.println(msg);
  228.             }
  229.         }
  230.         
  231.     }
  232.     synchronized void sendClientInfo()
  233.     {
  234.         String info="44当前聊天人数:"+size();
  235.         System.out.println(info);
  236.         sendToAll(info);
  237.     }
  238. }

 C#代码,Delphi代码

请到http://download.csdn.net/wind520下载

 


推荐阅读
author-avatar
gaoyong0713
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有