我正在编写一个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建立的连接上。
我有几个问题......
任何帮助都会受到赞赏,我大部分时间都花在这上面而且我非常沮丧,因为我无法获得基本的套接字通信工作: - /
答案 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);
}