【问题标题】:Air-As3 sockets closing socket stop sending informationAir-As3 套接字关闭套接字停止发送信息
【发布时间】:2013-01-22 13:51:43
【问题描述】:

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

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

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

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

在伪代码中:

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

如果我们使用定时器(约10秒)关闭socket,则正确发送,如果不正确,则服务器中的文件不完整。

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

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

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

提前致谢。

【问题讨论】:

    标签: actionscript-3 sockets air ftp


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。很有趣。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      • 2012-06-21
      相关资源
      最近更新 更多