1

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

简要介绍一下,我想从通过套接字公开它的进程中读取数据。因此,如果在 shell 中输入telnet localhost 8651我收到 xml,然后连接关闭(我得到以下内容Connection closed by foreign host.

无论如何,我在网上找到了一个简单的 flex教程,它本质上是一个 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 处理套接字的方式是否存在一些固有问题?

4

2 回答 2

0

出于安全原因,您要连接的主机必须在端口 943(或您尝试连接的同一端口)上提供 Flash 套接字策略请求。此页面向您展示如何在您尝试连接的服务器上进行设置:

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

在开发过程中,将 SWF 添加到在安全沙箱中运行的文件列表中通常很方便,以减少提供套接字策略文件的需要。

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

于 2010-02-16T04:01:47.460 回答
0

您在哪个安全沙箱中运行它?如果您将其作为嵌入网页的 Flash 应用程序运行,那么这很可能是违反安全规定的。

XMLSocket.connect() 方法只能连接到 SWF 文件所在域中的计算机。此限制不适用于在本地磁盘上运行的 SWF 文件。(此限制与 URLLoader.load() 的安全规则相同。)要连接到在 SWF 所在域以外的域中运行的服务器守护程序,您可以在服务器上创建允许从特定域。

于 2010-02-07T00:46:23.523 回答