2011-09-18 33 views
1

我正在编写一个SWF,我想通过套接字与Java进程进行通信。标准套接字通常很容易,但由于某些原因,Socket文档中描述的事件在所有迹象表明它们应该是时都不会触发。Actionscript 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进行的连接上。

我留下了几个问题...

  • 随着事件处理程序的异常,这是控制的结尾我的代码(在建立连接之后,我们只是等待事件并适当渲染它们)。整个程序是否会“终止”,我只是误解了运行时模型?
  • 对于被调用的回调是否存在可见性/命名要求?他们都是公开的,但是运行时可能没有看到他们?
  • AS3 Socket编程有什么问题吗?我一直在想,这是沙箱等的问题,但SECURITY_ERROR不火要么...

任何帮助,将不胜感激,我已经花了我大部分的时间就这个问题和我很沮丧,我不能获得基本的socket通信工作: -/

+0

如果有帮助,我做了我的大部分调试在Flash调试独立播放器。当我从浏览器中运行,Java端没有收到连接... –

+1

不,你的程序应该不会在这里结束,它应该只是静静地等待事件。 不,没有特殊的命名要求。 如果套接字服务器不提供策略文件响应,则应该存在安全错误,除非SWF受信任。 –

回答

2

它看起来像您要添加的事件侦听器的“此”对象,而不是插座。

试试这个:

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

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

+0

这就是它,感谢乔^ _ ^ –

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