2008-09-15 13 views
3

奇数ナーディーダーハリーポッターのタイトルのように聞こえる件名について申し訳ありません。AS3 FTPプログラミングとソケットとByteArrayクラス

AS3のSocketクラスを使用して、Flex Builder 3でAIRアプリケーションとしてエクスポートする簡単なFTPプログラムを作成しようとしています。ローカルネットワーク上のFTPサーバーを使用してプログラムをテストしています。私は正常にサーバー(簡単な部分)に接続することができますが、私はコマンドを送信することはできません。これらのコマンドを送信するためにByteArrayクラスを使用しなければならないと確信していますが、明らかに欠けている重要な情報があります。誰もこれを行う方法を知っていますか?ありがとう! Dave

答えて

0

この問題を解決するにはさらに詳しい情報が必要です。ここであなたが言っていることは私には正しいと思われます。 ByteArrayではなく、Socketクラスを使用してデータを送信しています。

データが送信されていませんか?あなたはどのように応答を受けていますか?それは正常に動作しているかもしれないが、あなたはそれを認識していないだけですか?私が言ったように、あなたがしていることについてもっと教えてください。

Lee Brimelowは、POP3クライアントを書くのにscreencast on gotoAndLearnです。基本的にはあなたがしていることと同じです。

0

構文が正しいことを100%確信していますか?私はあなたがそれを通過する要求の後に追加の改行を含める必要がありますHTTPで知っている。それがなければ何も戻らないでしょう。 FTPを使ってどうしているかわからない。

0

FTP標準では、コマンドの最後にCRLFが必要です。あなたの例では "\ n"の代わりに "\ r \ n"を使ってみてください。

0

正しく接続するには、FTPサーバーからCrossDomainポリシーファイルを提供する必要があります。

0

私が集めたことから、各コマンドを一度に1つずつ送信し、移動する前に応答を検証する必要があります。あなたはProgressEvent.SOCKET_DATAに対して何かを返すべきです。

これを試して、あなたが何を得るのかを見てください。

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

次に、このような応答を読みます。

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

FTPプロトコルは、UTFエンコーディングより先です。より良い結果を得るには、ANSI/ASCIIに切り替えてください。 writeUTFBytesではなくwriteMultiByteを選択した場合、それがLinuxでバグであることに注意してください。一方向にHere's

もう1つの質問hereがあります。ここでは、行末が原因であることが判明していますので、(上記のように)正しいことを確認してください。

前述のように、これがウェブから実行されている場合、すべてのソケット接続にはクロスドメインポリシーが必要ですが、これはHTTPベースのファイルではありません。セキュリティルールの最近の変更により、ソケットベースの接続は、まずターゲットホストのポート843でホストされているポリシーサーバーからクロスドメインを取得する必要があります。

は、Adobeからの引用:

SWFファイルは、もはやソケットポリシーファイルを使用せず、独自のドメインへのソケット接続を加えることができません。バージョン9,0,115,0以前では、SWFファイルは、ポリシーファイルなしで、独自のドメイン内のポート1024以上にソケット接続することを許可されていました。

HTTPポリシーファイルは、ソケット接続を承認するために使用できなくなりました。バージョン9,0,115,0より前のバージョンでは、ポート80の/crossdomain.xmlのマスターロケーションから提供されたHTTPポリシーファイルを使用して、同じホスト上の1024以上のポートへのソケット接続を認可することができました。

これは、基本的には、目的のFTPホストを制御し、この機能を実現するには補足ソフトウェアをインストールする必要があることを意味します。

+0

彼はそれを避けるために彼自身のホストを通過する可能性があります。 –

+0

私は同意しますが、これが発生するであろう帯域幅を肩代わりすることはありませんでした – spender

1

this linkも読んでください。おそらくthis oneでも役に立ちます。

最初のものはポリシーファイルに関するもので、もう1つはTELNET(ここではFTPがないもの)クライアントの例です。

1

私はブラウザでFTPクライアントを動作させることができましたが、それはバグです。 Flashがデータの接続と転送を許可されるように、ポリシーファイルをサーバーに送るために、ポート843で動作するリスナーを取得する必要がありました。次に、FTPが実際にどのように動作するかを把握する必要がありました。

コマンドソケットとデータソケットを2つ開く必要があります。コマンドソケットは、USER、PASS、CWD、およびSTORコマンドを送信する場所です。データソケットは、ByteArrayデータを書き込む場所です。 PASVコマンドを送信すると、データソケットがどのポートに接続する必要があるかがわかります。

私が「socket.close()」コマンドを呼び出すと、SafariとFFの両方でMac上にバグがありますが、実際にはサーバーソケットが閉じます。 Windozeではそうはしません。 SERVERが接続を閉じるまでEvent.CLOSEイベントが発生しないため、これは大きな問題です。これは、livedocsにあります。

これは私がいる場所です。なぜMac上で完璧に動作し、Windows上の3つの異なるブラウザで完全に破棄されるのかわからない。私が思いつくことができるのは、それがサーバーとの適切な通信を妨げるWindows構成内のものか、問題を引き起こしているのはWindow Flash Playerだということだけです。

どのような考えですか?

関連する問題