【发布时间】:2011-09-18 00:53:27
【问题描述】:
我正在编写一个 SWF,我想通过套接字与 Java 进程进行通信。这通常使用标准 Socket 很容易,但由于某种原因,当所有迹象都表明应该触发时,Socket 文档中描述的事件并没有触发。
在 Java 方面,我设置了一个 ServerSocket,它正在侦听端口 8080。使用 netcat 我已经确认它可以按设计工作。
不过,在 Flash 方面,我在文档中设置了 per the examples:
public function connectToPort(port : int):void
{
m_socket = new Socket();
addEventListener(Event.CLOSE, onClose);
addEventListener(Event.CONNECT, onConnect);
addEventListener(IOErrorEvent.IO_ERROR, onIoError);
addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
addEventListener(ProgressEvent.SOCKET_DATA, onData);
m_socket.connect("localhost", port);
// trace() doens't work for the command-line :(
m_debug.text = "Called connect!";
}
当我运行生成的 SWF 时,我得到的只是“调用连接!”在舞台上,没有任何事件发生。更奇怪的是,当我在 Java 端调查来自 ServerSocket 的通信时,它接收并接受了一个连接。当我关闭 SWF 时,调用我的服务器的代码正常完成 - 这意味着它挂在与我的 SWF 建立的连接上。
我还有几个问题......
- 除了事件处理程序之外,这是我的代码控制的结束(在建立连接后,我们只是等待事件并适当地呈现它们)。整个程序是否会“终止”,而我只是误解了运行时模型?
- 对于要调用的回调是否有可见性/命名要求?它们都是公开的,但会不会是运行时没有看到它们?
- AS3 Socket 编程有什么陷阱吗?我一直认为这是沙盒等问题,但 SECURITY_ERROR 也没有触发......
任何帮助都将不胜感激,我大部分时间都花在这上面,我非常沮丧,因为我无法让基本的套接字通信正常工作:-/
【问题讨论】:
-
如果有帮助,我将在 Flash Debug Standalone Player 中进行大部分调试。当我从浏览器运行时,Java 端没有收到连接...
-
不,你的程序不应该在这里终止,它应该只是静静地等待事件。不,没有特殊的命名要求。如果套接字服务器不提供策略文件响应,除非 SWF 是受信任的,否则应该会出现安全错误。
标签: flash actionscript-3 sockets networking