Flex界面和Java后台进行Socket交互,socket服务器端总接收到 <policy-file-request/>信息,而无法进行下一步通信。原因是Adobe Flash Player 9.0.124版本后,安全策略被更改,原来Socket或XmlSocket的应用里的http方式加载安全策略的手段不能继续使用。我们可以通过下面方法来实现。
Socket服务器端 检验得到安全策略 <policy-file-request/>,如接收则发送策略串
检验没有获得安全策略 <policy-file-request/>,则进行业务逻辑处理
客户端 初始化界面时调用Socket 第一次调用会发送安全策略建立连接,如成功获取服务器端的策略,此客户端将可以进行正常Socket连接请求
下面是Socket服务器端的代码:
InputStream br= socket.getInputStream();
byte [] reader = new byte [1000];
BufferedWriter pw = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream()));
while (br.read(reader)!=-1){
String msg="";
msg=new String(reader,"UTF-8"); //输入的请求
byte [] reader = new byte [1000];
BufferedWriter pw = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream()));
while (br.read(reader)!=-1){
String msg="";
msg=new String(reader,"UTF-8"); //输入的请求
reader =new byte [1000];
if(msg!=null){
String safe = "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\0";
if(msg.indexOf("<policy-file-request/>") >=0)
{
pw.write(safe); //传回安全策略串
pw.flush();
}
else
{
//正常业务逻辑处理
}
if(msg!=null){
String safe = "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\0";
if(msg.indexOf("<policy-file-request/>") >=0)
{
pw.write(safe); //传回安全策略串
pw.flush();
}
else
{
//正常业务逻辑处理
}
}
}
}