【问题标题】:AS3 FTP Programming and the Socket and ByteArray ClassesAS3 FTP 编程和 Socket 和 ByteArray 类
【发布时间】:2010-09-08 22:45:02
【问题描述】:

很抱歉,主题行听起来像是一个更加书呆子气的哈利波特标题。

我正在尝试使用 AS3 的 Socket 类编写一个简单的 FTP 程序,以在 Flex Builder 3 中导出为 AIR 应用程序。我正在使用本地网络上的 FTP 服务器来测试该程序。我可以成功连接到服务器(简单的部分),但我无法发送任何命令。我很确定您必须使用 ByteArray 类来发送这些命令,但是我显然遗漏了一些关键信息。有谁知道如何做到这一点?谢谢! 戴夫

【问题讨论】:

    标签: actionscript-3 sockets ftp bytearray


    【解决方案1】:

    我们需要更多信息来解决这个问题。你在这里所说的对我来说似乎是正确的。您使用的是 Socket 类来发送数据,而不是 ByteArray。

    您确定没有发送数据吗?您如何收到回复?可能是它工作正常,但您只是不知道吗?正如我所说,告诉我们更多关于你在做什么..

    Lee Brimelow 有一个screencast on gotoAndLearn 写了一个 POP3 客户端。这与您所做的基本相同,因此请看一下。

    【讨论】:

      【解决方案2】:

      您是否 100% 确定语法正确?我知道对于 HTTP,您必须在请求通过后包含额外的换行符。没有它,您将一无所获。不过不知道 FTP 的情况如何。

      【讨论】:

        【解决方案3】:

        FTP 标准要求在命令末尾使用 CRLF。尝试在您的示例中使用“\r\n”代替“\n”。

        【讨论】:

          【解决方案4】:

          您必须从 FTP 服务器提供跨域策略文件才能正确连接。

          【讨论】:

            【解决方案5】:

            根据我收集到的信息,您必须一次发送一个命令并验证响应,然后再继续。你应该得到一些反对 ProgressEvent.SOCKET_DATA 的东西

            试试这个,看看你会得到什么回应。

            socket.writeUTFBytes("USER "+user+"\n"); socket.flush();
            

            然后你会像这样读出响应。

            var response:String = mySocket.readUTFBytes(mySocket.bytesAvailable);
            

            【讨论】:

              【解决方案6】:

              FTP 协议早于 UTF 编码。切换到 ANSI/ASCII 以获得更好的结果。如果您确实选择了 writeMultiByte 而不是 writeUTFBytes,请注意它在 linux 中存在错误。 Here's 一种解决方法。

              还有另一个问题here 的行尾是罪魁祸首,所以请确保你做对了(如上所述)。

              如前所述,如果这是从 Web 运行的,则所有套接字连接都需要跨域策略,但这不是基于 HTTP 的文件。最近对安全规则的更改意味着任何基于套接字的连接必须首先从托管在目标主机端口 843 上的策略服务器获取跨域。

              引自 Adob​​e:

              如果没有套接字策略文件,SWF 文件可能无法再与自己的域建立套接字连接。在版本 9,0,115,0 之前,SWF 文件可以在没有策略文件的情况下与自己域中的 1024 或更大端口建立套接字连接。

              HTTP 策略文件可能不再用于授权套接字连接。在版本 9,0,115,0 之前,可以使用从 /crossdomain.xml 的主位置在端口 80 上提供的 HTTP 策略文件来授权与同一主机上任何端口 1024 或更高端口的套接字连接。

              本质上,这意味着您必须控制目标 FTP 主机,并在其上安装补充软件才能使其正常工作。

              【讨论】:

              • 他可以通过自己的主机来避免这种情况。
              • 我同意,但从来没有能力承担由此产生的带宽
              【解决方案7】:

              也阅读this link,也许它对this one也有用。

              第一个是关于策略文件的,第二个是 TELNET(所以,这里没有 FTP)客户端的示例。

              【讨论】:

                【解决方案8】:

                我已经能够让 FTP 客户端在浏览器中运行,但它有问题。我必须在端口 843 上运行一个侦听器来为策略文件提供服务,以便允许 Flash 连接和传输数据。然后,我必须弄清楚 FTP 的实际工作原理:

                您必须打开 2 个套接字:一个命令套接字和一个数据套接字。命令套接字是您发送 USER、PASS、CWD 和 STOR 命令的地方。数据套接字是您将 ByteArray 数据写入的位置。发送 PASV 命令将告诉您数据套接字必须连接到哪个端口。

                问题出在 Mac 上,在 Safari 和 FF 中,当我调用“socket.close()”命令时,服务器套接字实际上会关闭。在 Windoze 上,它没有。这是一个大问题,因为在服务器关闭连接之前不会触发 Event.CLOSE 事件。这在 livedocs 中。

                这就是我所在的地方。我不知道为什么它会在 Mac 上完美运行,然后在 Windows 上的 3 种不同浏览器中完全崩溃。我唯一能想到的是,要么是我的 Windows 配置中的某些东西阻止了与服务器的正常通信,要么是 Window Flash 播放器导致了问题。

                有什么想法吗?

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-06-15
                  • 1970-01-01
                  • 2012-07-17
                  • 2013-02-13
                  • 1970-01-01
                  • 2015-08-21
                  • 2010-11-14
                  相关资源
                  最近更新 更多