2009-08-24 12 views
2

Flex Builder 3でのアクションスクリプト3の使用ソケットのEnd Of Fileは何を意味しますか?

SOCKET_DATAイベントを処理するときに、一見無作為に見えることがあります。「エラー#2030:ファイルの最後に遭遇しました。 socket.readInt()を呼び出すとき。私はファイルを読んでいないので、このエラーが何を意味するのか混乱していますか?私はソケットで少し不平等です。ありがとう。

答えて

3

、あなたが取得します:Error #2002: Operation attempted on invalid socket.

エンド・オブ・ファイルのエラーは通常、あなたが利用できるよりも多くのバイトを読めば...これはのためのケースである、任意のbytestreamsで発生しますファイル、ソケットなど...フラッシュの場合は、SocketまたはByteArrayから読み込んだり、場合によってはその他の場合でも発生します。

TCP/IPはパッケージベースですが、ストリームをエミュレートします。 ..あなたはストリームからデータを読み取ることができます。これはすでにTCPパッケージで送信されています...チェックするためにSocket::bytesAvailableをチェックしてください。現在利用可能なバイト数は...常に心に留めておいてください帽子あなたは、私が取得する必要があります、socketDataイベント...

greetz

back2dos

+0

この問題を持つ他の誰かのフォローアップ。私はbytesAvailableが> 0であることを確認しているだけなので、他の人のコードから見ていたが、その後4バイトになるreadIntを実行しているからだと思います。したがって、1〜3バイトのデータしかない場合、readIntは何らかの形で仮想的に失敗します。 – AaronLS

7

ファイルの終了エラーは、通常、ソケットのもう一方の側が接続を閉じたことを意味します(IIRC)。

それはファイルエンドオブだ理由は、プログラム内の非常に低いレベルで、ディスクおよびソケット上のファイルが両方の数で表現されていることである - OSがに変換することを - file descriptorオブジェクトはファイルやソケット、パイプなどを表します。

通常、EOFを読み込んだかどうかを確認することで、この種のエラーを回避できます。 EOFを読んだ後、ソケット/ファイルからもう一度読もうとすると、EOFエラーが発生します。


更新: the ActionScript 9.0 documentationによると、もう一方の端がソケットを閉じると、実際にクローズイベントが発生します。ソケットをオフに読んで、それが閉じているときに

+0

感謝をトリガするために、各非常におそらく原因フラッシュプレーヤー、複数のパッケージに到着して、一回の操作でソケットに書き込むデータをSOCKET_CLOSEイベントまたはそれと類似している場合、他の側は接続を閉じますか? – AaronLS

+0

良い推測ですが、フラッシュプレーヤーの場合はそうではありません...私の答えを参照してください... – back2dos

関連する問題