actionscript socket readBytes() <- java app write() write() write()

Posted

技术标签:

【中文标题】actionscript socket readBytes() <- java app write() write() write()【英文标题】: 【发布时间】:2012-08-07 05:51:02 【问题描述】:

我是动作脚本的新手。我使用套接字为 IO 开发了一个 flex 应用程序。

问题是我无法通过动作脚本套接字从服务器端的各种写入中读取字节,而无需在每次 flexapp 读取后向服务器(读取我的写入)写入内容。

例如,这很好用:

server: write()

flex app: read()

server: write()

flex app: read()

但是: server: write()

server: write()

server: write()

flex app: read()

导致只阅读第一条消息

好像actionscript socket不支持全双工模式。这是真的吗?

ps:我第一次认为这是一个安全问题,但现在一切都完成了,包括 Security.allowDomain("*");和策略文件检索(也在使用 crossdomain.xml 文件进行测试)- 没有结果;

psps:服务器端在最后写入带有 '\n' 的消息,并且每次写入后都会调用 flush() 方法。 我认为我的部分数据检索代码没问题,因为它会发送所有数据,但仅在读取后进行写入时

你有什么想法吗?

谢谢,安德烈

【问题讨论】:

【参考方案1】:

全双工模式无关紧要,每个TCP都是全双工的。 TCP 不保证一次接收到多少数据,实际上你会发现这里有很多线程抱怨他们没有只接收到你的示例中第一个 write() 写入的内容。你只需要读取字节流并自己弄清楚。

【讨论】:

但我的代码等待消息的所有部分并准备好读取部分数据。 (在我的示例中,一个 read() 表示准备好检索部分数据的算法)问题不是所有数据都可以从套接字中获取,而服务器进行了 3 次写入。只能读取第一条消息,其他算法内读取尝试不返回数据。 我的意思是没有数据 - 在 SOCKET_DATA 事件调用的函数中读取第一条消息。当算法工作时(在 SOCKET_DATA 处理函数的末尾)socket.bytesAvailable 等于 0。并且没有更多事件到达......但是如果我将 write() 调用放在处理函数的末尾并添加 read() 调用(就像在第一个我的例子)进入服务器端代码,事件就会到来。 抱歉,在我的代码中发现错误!所有三条消息都同时到达,但我只通过添加大小字节来解析其中的第一条。

以上是关于actionscript socket readBytes() <- java app write() write() write()的主要内容,如果未能解决你的问题,请参考以下文章

在actionscript服务器和java客户端之间通过socket发送对象

如何在 Actionscript 3 中接收来自 Socket 的命令?

actionscript socket readBytes() <- java app write() write() write()

有关与 .Net 的 ActionScript 套接字通信的帮助

ActionScript 3.0 套接字无法重新连接

使用Actionscript获取google页面排名