我创建了一个客户端和服务器, 如果我在独立的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();
我不明白为什么通过浏览器它不起作用。
答案 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关闭与您的服务器的连接,如果策略授权其访问,它将再次打开一个“真实”连接,该连接将保持建立并可以在其上发送数据。
答案 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
…
}
…