flex java socket聊天室问题
开始做的时候碰到的是安全策略的问题,然后网上搜了一把,解决了一部分,现在的问题是我如果是在application里面建立socket通信,没有问题,但是我现在要的是先加载...
开始做的时候碰到的是安全策略的问题,然后网上搜了一把,解决了一部分,现在的问题是 我如果是在application里面建立socket通信,没有问题,但是我现在要的是先加载一个module就是一个单独的swf文件,然后再这里module建立于服务端的socket连接,这样连接不会报错,但是客户端一直监听不到connect成功的事件。。。而且当我关闭页面的时候能向后台发送信息。。。。我觉得还是安全策略文件的问题,因为在application中可以建立连接,但是在module里面却不行。。。
代码如下:
安全策略文件
private String xml="<cross-domain-policy> "
+"<allow-access-from domain=\"*\" to-ports=\"1025-10000\"/>"
+"</cross-domain-policy> ";
java代码:
if (s.equals("<policy-file-request/>"))
{
System.out.println("接收到:" + socket.getInetAddress() + " policy-file-request");
out.print(xml);
out.print("\0");
out.flush();
br.close();
out.close();
socket.close();
}
这是一个module里面的as代码:
socket.addEventListener(Event.CONNECT, socketConnectHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket = new Socket();
socket.connect("127.0.0.1", 9999);
虽然上面已经注册connect事件监听,但是怎么都进不了回调函数。。。 展开
代码如下:
安全策略文件
private String xml="<cross-domain-policy> "
+"<allow-access-from domain=\"*\" to-ports=\"1025-10000\"/>"
+"</cross-domain-policy> ";
java代码:
if (s.equals("<policy-file-request/>"))
{
System.out.println("接收到:" + socket.getInetAddress() + " policy-file-request");
out.print(xml);
out.print("\0");
out.flush();
br.close();
out.close();
socket.close();
}
这是一个module里面的as代码:
socket.addEventListener(Event.CONNECT, socketConnectHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket = new Socket();
socket.connect("127.0.0.1", 9999);
虽然上面已经注册connect事件监听,但是怎么都进不了回调函数。。。 展开
1个回答
展开全部
你的SWF是怎么加载的?试着用Loader类载入,然后建一个LoderContext给他设置一下安全沙箱:
private var loderContext:LoaderContext=new LoaderContext(); loderContext.allowCodeImport=true;
设定applicationDomain,具体设定你看一下帮助,我只是提示,可以尝试把里边像什么allowCodeImport都打开。
然后载入时载入这个对象为LOADER的值像这样:
newLogo.load(urlRequest,loderContext)
另外你查as里边的的Security类,把它应用一下,应用到你加载的SWF,在他里边使用,载入场景也都用一下(最后再慢慢排除是哪里起作用)
最后记得尝试把防火墙后系统自带的防火墙都关了再试。
private var loderContext:LoaderContext=new LoaderContext(); loderContext.allowCodeImport=true;
设定applicationDomain,具体设定你看一下帮助,我只是提示,可以尝试把里边像什么allowCodeImport都打开。
然后载入时载入这个对象为LOADER的值像这样:
newLogo.load(urlRequest,loderContext)
另外你查as里边的的Security类,把它应用一下,应用到你加载的SWF,在他里边使用,载入场景也都用一下(最后再慢慢排除是哪里起作用)
最后记得尝试把防火墙后系统自带的防火墙都关了再试。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询