1

私たちのテストによると、DataSocketを閉じると、「最近」書き込まれた情報は送信されないようです。

AS3コードでFTPを使用しており、コマンドとデータソケットを開きます。

dataSockeは、書き込むたびに正しくフラッシュされます。

重要なのは、fileStreamからのすべての情報が読み取られ、dataSocketに書き込まれ、フラッシュされたときに、ソケットを閉じたことです。

疑似コードの場合:

-bytesToWrite = filestream.bytesToRead();
-Datasocket.write(bytesToWrite).
-Datasocket.flush():
-if (filestream.noMoreData)
    DataSocket.close().

タイマー(約10秒)を使用してソケットを閉じると、正しく送信されます。そうでない場合、サーバー内のファイルは不完全です。

不思議なことに、フラッシュ後、ソケットを閉じると、ソケットが閉じられます。SOはこの情報を送信し、いつ送信するかを決定します。「トランスポート層、今書いたものを送信しないでください。君" :-)。

しかし、実際にはas3ソケットがそのようなことをしているようです。ドキュメントを読みましたが、フラッシュを行うとSOの責任になります。したがって、AS3ソケットを閉じた後でも、SOに送信する情報がある場合は、それを送信する必要があります。

この動作が表示される理由はありますか?

前もって感謝します。

4

2 に答える 2

2

究極のSO_LINGERページをお読みください。または、ソケットAPIおよびカーネルスタックレベルで何が起こっているのかを理解するために私のtcpが信頼できないのはなぜですか。

次に、アドバイスに従い、少なくともいくつかの基本的なアプリケーションレベルのプロトコルを生のTCPバイトストリームの上に置きます-受信しようとしているデータの長さを受信者に伝え、すべてが送信者に読み戻されたことを確認します。

于 2013-01-22T14:04:41.793 に答える
0

興味深いことに、ソケットを閉じる前にこのイベントをリッスンできますか:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html#event: outputProgress

于 2013-01-22T14:49:30.777 に答える