Actionscript Socket事件没有触发?

时间:2011-09-18 00:53:28

标签: flash actionscript-3 sockets networking

我正在编写一个SWF,我想通过套接字与Java进程通信。使用标准套接字通常很容易,但由于某些原因,当所有符号都表明它们应该出现时,Socket文档中描述的事件不会触发。

在Java方面,我设置了一个正在侦听端口8080的ServerSocket。使用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建立的连接上。

我有几个问题......

  • 除了事件处理程序之外,这是我的代码的控制结束(在建立连接之后,我们只是等待事件并适当地渲染它们)。整个程序可能会“终止”,而我只是对运行时模型的误解?
  • 是否有调用它们的回调的可见性/命名要求?它们都是公开的,但可能是Runtime没有看到它们吗?
  • AS3 Socket编程是否有任何问题?我一直认为这是一个沙盒等问题,但是SECURITY_ERROR也没有开火......

任何帮助都会受到赞赏,我大部分时间都花在这上面而且我非常沮丧,因为我无法获得基本的套接字通信工作: - /

2 个答案:

答案 0 :(得分:2)

看起来您正在将事件侦听器添加到“this”对象,而不是套接字。

试试这个:

m_socket.addEventListener(Event.CLOSE, onClose);
m_socket.addEventListener(Event.CONNECT, onConnect);
m_socket.addEventListener(IOErrorEvent.IO_ERROR, onIoError);
m_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
m_socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);

你应该开始看到套接字事件。

答案 1 :(得分:0)

这些行会将事件监听器添加到this,而不是m_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使用

with(m_socket) {
    addEventListener(Event.CLOSE, onClose);
    addEventListener(Event.CONNECT, onConnect);
    addEventListener(IOErrorEvent.IO_ERROR, onIoError);
    addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
    addEventListener(ProgressEvent.SOCKET_DATA, onData);
}