Air-As3插座关闭插座停止发送信息

时间:2013-01-22 13:51:44

标签: actionscript-3 sockets air ftp

根据我们的测试,似乎如果关闭DataSocket,则不会发送“最近”写入的信息。

我们在AS3代码中使用FTP,并打开命令和数据套接字。

每次我们写入时都会正确刷新dataSocke。

问题在于,当fileStream中的所有信息都被读取并写入/刷新到dataSocket时,我们关闭了套接字。

在speudo-code中:

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

如果我们使用一个计时器(大约10秒钟)关闭套接字,它就会正确发送,如果不是,则服务器中的文件不完整。

好奇的是,在刷新后,关闭一个套接字,只是关闭一个套接字,SO有这个信息发送并决定何时发送它,你不能说“嘿传输层,不发送什么我刚给你写了“: - )。

但实际上as3套接字似乎正在做类似的事情。 我已经阅读了文档,如果你进行了刷新,那么它应该负责SO,所以即使在关闭AS3套接字后,如果SO有一个要发送的信息,它应该发送它。

知道为什么会出现这种行为吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

请阅读The ultimate SO_LINGER page, or: why is my tcp not reliable以了解套接字API和内核堆栈级别的内容。

然后按照建议并在原始TCP字节流之上放置至少一些基本应用程序级协议 - 告诉接收者它将要接收的数据长度,发送确认所有内容已被读回发件人。

答案 1 :(得分:0)