2010-02-07 59 views
1

我想做一个flex应用程序,它从telnet连接获取数据,并且我遇到了一个奇怪的问题。Actionscript flex套接字和telnet

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

无论如何,我发现了一个简单的tutorial在线柔性,基本上是一个远程登录客户端和一个会指望它工作,但一切遵循墨菲的法律,并没有任何工作!

现在我在每个事件处理程序和所有我能想到的地方打印消息。当我连接到套接字时什么也没有发生,即使连接或关闭处理程序也没有触发事件处理程序,并且如果我执行以下操作,则socket.connected返回false!我没有得到任何的错误,尝试赶上没有例外。我对输入错误感到不知所措?

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

有一些关于远程登录,我不知道和它造成这一行不通。更有趣的是,为什么没有任何事件被解雇。

另一个有趣的事情是,我有一些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如何处理套接字有一些固有的问题吗?

+0

OK,所以我想通一些东西是让我进步,但仍然没有解决问题! 我在编译时设置了-use-network = false。这让我前进。所以现在当我尝试连接到套接字时,我得到一个异常。 错误号码是2010年,我GOOGLE了,发现它与跨域策略有关。 现在的问题是该文件在我的本地硬盘上。我甚至没有使用网络服务器。那么我在哪里放置crossdomain.xml文件,然后我把它放在什么位置。 – MAC 2010-02-07 06:12:05

+0

现在我把它放在与swf文件相同的目录中,文件内容如下。但它仍然无法正常工作。 <?XML版本= “1.0”?> \t <!DOCTYPE跨域政策SYSTEM “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”> \t \t \t MAC 2010-02-07 06:13:37

回答

0

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

的XMLSocket.connect()方法可 只连接到计算机在所述SWF文件所在的同一 域。 此限制不适用于运行本地磁盘的SWF 文件。 (这 限制是相同与URLLoader.load()的 安全规则) 要连接到其他域中运行 一个服务器守护程序不是一个地方 的SWF所在,你可以创建一个 安全策略文件允许从特定的 域访问的服务器 。

+0

此刻,一切都在同一台机器上。而且IAM不使用XMLSocket,而是Socket套接字。 至于安全沙箱,我不知道。这是我第一次尝试flex。即使这是一个安全问题,我不应该得到某种错误或例外? – MAC 2010-02-07 01:19:31

+0

嗯,我可以制作一个跨域策略文件,但我不知道把它放在哪里。就像我说的一切都在硬盘上。 – MAC 2010-02-07 01:40:08

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

+0

我认为你的意思是843 – devshorts 2012-06-07 13:39:48