无法从浏览器连接到服务器

时间:2014-04-14 07:50:51

标签: actionscript-3 sockets serversocket

我创建了一个客户端和服务器, 如果我在独立的Flash播放器上运行客户端,那么效果很好。 但如果我从我的本地主机,从我的浏览器(使用wamp服务器)运行它,它不起作用。 错误(在服务器端):

Error: Error #2030: End of file was encountered.
at flash.net::Socket/readUTF()
at com.TWW::serverAPI/getData()[FILE:64]

第64行是:

var text:String = socket.readUTF();

我不明白为什么通过浏览器它不起作用。

2 个答案:

答案 0 :(得分:2)

当您通过浏览器使用套接字时,Flash不会立即发送您发送到服务器的内容。

首先,它打开第一个连接,并询问服务器是否可以连接。它发送<policy-file-request/>

服务器必须回答类似的事情:

<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="YOURLOCALDOMAIN" to-ports="PORT YOUR SERVER IS RUNNING AT" /></cross-domain-policy>

后跟NULL字节。

然后,Flash关闭与您的服务器的连接,如果策略授权其访问,它将再次打开一个“真实”连接,该连接将保持建立并可以在其上发送数据。

More infos here.

答案 1 :(得分:0)

基于 blue112 的回答,这是我的解决方案:

…
while( (k = in.read(buff, 0, 1)) > -1 ) {
    result += new String(buff, 0, k);

    // Flash privacy policy
    if(result.equals("<policy-file-request/>")) {
        out.write("<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"12345\" /></cross-domain-policy>\0");
        out.flush();
    }

    // Process message stuff
    …
}
…