Flash Actionscript套接字事件未触发?

Flash Actionscript套接字事件未触发?,flash,actionscript-3,sockets,networking,Flash,Actionscript 3,Sockets,Networking,我正在编写一个SWF,希望通过套接字与Java进程通信。使用标准套接字通常很容易,但由于某些原因,套接字文档中描述的事件在所有迹象都表明应该触发时没有触发 在Java端,我设置了一个在8080端口上监听的端口。使用netcat,我已确认它按设计工作 然而,在Flash方面,我在文档中设置: public function connectToPort(port : int):void { m_socket = new Socket(); addEventListener(E

我正在编写一个SWF,希望通过套接字与Java进程通信。使用标准套接字通常很容易,但由于某些原因,套接字文档中描述的事件在所有迹象都表明应该触发时没有触发

在Java端,我设置了一个在8080端口上监听的端口。使用netcat,我已确认它按设计工作

然而,在Flash方面,我在文档中设置:

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套接字编程有什么问题吗?我一直认为这是沙箱等问题,但安全错误也没有触发

任何帮助都将不胜感激,我花了一天的大部分时间在这方面,我非常沮丧,因为我无法让基本的套接字通信正常工作:-/

看起来您正在将事件侦听器添加到“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);

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

这些行将事件侦听器添加到
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_插槽
中,请使用

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);
}

如果有帮助,我将在FlashDebug独立播放器中进行大部分调试。当我从浏览器运行时,Java端没有收到连接…不,你的程序不应该在这里终止,它应该静静地等待事件。不,没有特殊的命名要求。如果套接字服务器不提供策略文件响应,则应该存在安全错误,除非SWF受信任。