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 页面,或者:为什么我的 tcp 不可靠,无法理解套接字 API 和内核堆栈级别发生的事情。

然后按照建议,在原始 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 回答