我有一个连接到AS3服务器并检索文件/文件夹列表的FTP脚本。该脚本在设备通过WIFI或LAN连接到互联网时运行良好,但在通过手机3G连接时无法登录
下面是我的代码:
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.net.Socket;
import flash.events.IOErrorEvent;
import flash.errors.IOError;
//
var ftp_host:String="ftp.server.com";
var ftp_port:Number=21//or your ftp port;
var ftp_username:String="username";
var ftp_password:String="password";
var ftp_path:String="/";
var s,r;
var listOfFiles:Array;
//
readFromFTP()
function readFromFTP(e=null){
s = new Socket(ftp_host,ftp_port);
r = new Socket();
listOfFiles=new Array();
s.addEventListener(IOErrorEvent.IO_ERROR,onIOERR);
s.addEventListener(ProgressEvent.SOCKET_DATA, onReturnData);
s.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecERR);
r.addEventListener(ProgressEvent.SOCKET_DATA, onServData);
r.addEventListener(Event.CONNECT, onPasvConn);
r.addEventListener(IOErrorEvent.IO_ERROR,onIOERR);
r.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecERR);
loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, handleGlobalErrors);
}
function onReturnData(evt:ProgressEvent)
{
var d = s.readUTFBytes(s.bytesAvailable);
trace(d);
text_txt.appendText(d);
if(d.indexOf("220 ")>-1){
text_txt.appendText("Username sent\n");
s.writeUTFBytes("USER "+ftp_username+"\n");
s.flush()
}
if(d.indexOf("331 ")>-1){
text_txt.appendText("Password sent\n");
s.writeUTFBytes("PASS "+ftp_password+"\n");
s.flush()
}
if (d.indexOf("230") > -1)
{
text_txt.appendText("PASV command sent\n");
s.writeUTFBytes("PASV \n");
s.flush();
}
var a = d.indexOf('227');
if (a > -1)
{
var st = d.indexOf("(",a);
var en = d.indexOf(")",a);
var str;
str = d.substring(st + 1,en);
var a2 = str.split(",");
var p1 = a2.pop();
var p2 = a2.pop();
var ip:String = a2.join(".");
var port:int=(p2*256)+(p1*1);
r.connect(ip, port);
}
if(d.indexOf("226 ")>-1){
text_txt.appendText("QUIT command sent\n");
s.writeUTFBytes("QUIT \n");
s.flush();
}
if(d.indexOf("221 ")>-1){
}
}
function onPasvConn(evt:Event):void
{
//trace("CONNECTED TO DATA PORT");
text_txt.appendText("CONNECTED TO DATA PORT\n");
s.writeUTFBytes("NLST "+ftp_path+"\n");
s.flush();
}
function onServData(evt:ProgressEvent):void
{
var d = r.readUTFBytes(r.bytesAvailable);
trace(d);
text_txt.appendText(d);
}
function onIOERR(evt:IOErrorEvent)
{
trace(evt.errorID+":"+evt.text);
text_txt.appendText(evt.errorID+":"+evt.text);
}
function onSecERR(evt){
text_txt.appendText("Security error\n");
}
function handleGlobalErrors(evt){
text_txt.appendText("Unhandeled Error\n");
}发布于 2012-08-25 15:14:42
最后我修复了这个bug。
由于某些原因,服务器未使用(\n)换行符响应命令。
我将其更改为(\r\n),现在运行正常
我希望这能帮助到一些人
发布于 2012-07-31 19:42:15
许多3G运营商阻塞了某些端口,这将导致它失败。
可以肯定的是,AS3本身在3G上的表现不会有什么不同。
https://stackoverflow.com/questions/11000509
复制相似问题