ActionScript Flex 套接字与 Telnet

1 投票
2 回答
1102 浏览
提问于 2025-04-15 18:58

我正在尝试制作一个Flex应用程序,它通过Telnet连接获取数据,但遇到了一个奇怪的问题。

简单来说,我想从一个通过套接字(socket)暴露数据的进程中读取数据。所以当我在命令行输入telnet localhost 8651时,我能收到XML数据,然后连接就关闭了(我看到Connection closed by foreign host.这条信息)。

无论如何,我在网上找到一个简单的教程,这个教程基本上是一个Telnet客户端,按理说应该能正常工作,但事情总是出错,真是让人无奈!

现在我在每个事件处理器和我能想到的所有地方都打印了消息。当我连接到套接字时,什么都没有发生,连连接或关闭的处理器都没有被触发,而且如果我执行以下操作,socket.connected返回的是false!我没有收到任何错误,try catch也没有抛出异常。我真不知道问题出在哪里?

        socket.connect(serverURL, portNumber);
        msg(socket.connected.toString());

是不是有我不知道的Telnet的某些特性导致它无法正常工作?更有趣的是,为什么没有任何事件被触发。

还有一个有趣的事情是,我有一些Python代码可以做到这一点,并且能够成功获取XML数据!

以下是能正常工作的Python代码!

  def getStats(host, port):
 sock = socket.socket()
 sock.connect((host, port))
 res = sock.recv(1024*1024*1024, socket.MSG_WAITALL)
 sock.close()
 return statFunc(res)

所以我想问你,究竟出了什么问题!!!!!!Flex处理套接字时是不是有什么固有的问题?

2 个回答

0

出于安全考虑,你连接的主机必须在943端口(或者你尝试连接的同一个端口)上提供Flash socket策略请求。这一页教你如何在你想连接的服务器上设置这个。

http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

在开发过程中,通常可以方便地将你的SWF文件添加到安全沙箱的文件列表中,这样就不需要提供socket策略文件了。

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html

0

你是在什么样的安全沙箱中运行这个程序的?如果你是在网页中嵌入的Flash应用程序中运行,那么这很可能是违反了安全规则。

XMLSocket.connect() 方法只能连接到与SWF文件所在的同一个域的计算机。这个限制不适用于从本地磁盘运行的SWF文件。(这个限制和URLLoader.load()的安全规则是一样的。)如果你想连接到一个在不同域中运行的服务器程序,你可以在服务器上创建一个安全策略文件,允许来自特定域的访问。

撰写回答