Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3 FTP编程以及Socket和ByteArray类_Actionscript 3_Sockets_Ftp_Bytearray - Fatal编程技术网

Actionscript 3 AS3 FTP编程以及Socket和ByteArray类

Actionscript 3 AS3 FTP编程以及Socket和ByteArray类,actionscript-3,sockets,ftp,bytearray,Actionscript 3,Sockets,Ftp,Bytearray,很抱歉,这句话听起来更像是一个书呆子哈利波特的标题 我正在尝试使用AS3的Socket类编写一个简单的FTP程序,以便在Flex Builder 3中导出为AIR应用程序。我正在使用本地网络上的FTP服务器来测试该程序。我可以成功连接到服务器(简单的部分),但我不能发送任何命令。我很确定您必须使用ByteArray类来发送这些命令,但是我显然缺少一些关键信息。有人知道怎么做吗?谢谢 Dave我们需要更多信息来解决此问题。。你在这里说的对我来说似乎是正确的。不过,您使用的是Socket类来发送数据

很抱歉,这句话听起来更像是一个书呆子哈利波特的标题

我正在尝试使用AS3的Socket类编写一个简单的FTP程序,以便在Flex Builder 3中导出为AIR应用程序。我正在使用本地网络上的FTP服务器来测试该程序。我可以成功连接到服务器(简单的部分),但我不能发送任何命令。我很确定您必须使用ByteArray类来发送这些命令,但是我显然缺少一些关键信息。有人知道怎么做吗?谢谢
Dave

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

您确定没有发送数据吗?您是如何收到回复的?也许它工作得很好,但你只是没有意识到?就像我说的,告诉我们更多关于你在做什么


Lee Brimelow有编写POP3客户端的经验。这与您正在做的基本相同,请看一看。

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

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

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

根据我收集的信息,您必须一次发送一条命令,并在继续之前验证响应。您应该从ProgressEvent.SOCKET\u数据中获取一些信息

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

socket.writeUTFBytes("USER "+user+"\n"); socket.flush();
然后,您会像这样读出响应

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

FTP协议早于UTF编码。切换到ANSI/ASCII以获得更好的结果。如果您选择writeMultiByte而不是writeUTFBytes,请注意linux中存在缺陷。绕一圈

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

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

引用Adobe:

如果没有套接字策略文件,SWF文件可能不再与自己的域建立套接字连接。在版本9,0115,0之前,SWF文件被允许在没有策略文件的情况下与自己域中的端口1024或更大的端口进行套接字连接

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

本质上,这意味着您必须控制目标FTP主机,并在其上安装辅助软件以使其工作。

请阅读,也许它也会有用


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

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

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

当我调用“socket.close()”命令时,服务器套接字实际上关闭了。在温多泽,情况并非如此。这是一个很大的问题,因为直到服务器关闭连接时才会触发Event.CLOSE事件。这在livedocs中

这就是我所处的位置。我不知道为什么它会在Mac上完美地工作,然后在Windows上的3种不同浏览器中完全崩溃。我能想到的唯一一件事是,要么是我的Windows配置中的某些东西妨碍了与服务器的正常通信,要么是Windows Flash player造成了问题


有什么想法吗?

他可以通过自己的主机来避免这种情况。我同意,但他从来没有承担过这会带来的带宽