根据我们的测试,似乎如果关闭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有一个要发送的信息,它应该发送它。
知道为什么会出现这种行为吗?
提前致谢。
答案 0 :(得分:2)
请阅读The ultimate SO_LINGER page, or: why is my tcp not reliable以了解套接字API和内核堆栈级别的内容。
然后按照建议并在原始TCP字节流之上放置至少一些基本应用程序级协议 - 告诉接收者它将要接收的数据长度,发送确认所有内容已被读回发件人。
答案 1 :(得分:0)