Actionscript TCP Socket无法为某些人发送消息

时间:2009-10-05 09:51:53

标签: flash actionscript-3 sockets tcp

我已经编写了一个套接字服务器,它使用Socket类与我的actionscript 3 flash游戏进行通信。这是一个TCP连接,我认为这意味着它100%确定服务器将接收发送消息,因为这是低级别的。因此,如果它无法发送,它将重新发送消息。

对于我和我测试构建的其他两个人来说,情况确实如此。然而,对于一个人,有时(罕见但不可忽略),服务器不接收该消息,即使这对其他人的系统似乎没有发生。然而,这个人从来没有遇到任何其他专业多人游戏的问题,这意味着它一定是我的构建问题。

我能做些什么来确保正确发送消息,而且我错误地认为TCP是100%安全的,因为消息应该在低级故障时重新发送?

4 个答案:

答案 0 :(得分:5)

你是对的,这是一个常见的问题,但问题是一般的,独立于闪存。 我发了一条消息,但它从未收到过,我该怎么办?你需要检查你的客户端代码是否确实发送了消息;你需要检查消息是否离开了客户端机器;你需要检查消息是否到达服务器机器;并且您需要检查服务器应用程序是否收到了消息。您还需要确保客户端和服务器之间的连接/套接字仍然存在。

在尝试诊断此问题时,假设TCP失败是错误的启动位置。如果您使用的是UDP,那么故事就不同了,因为UDP不保证交付(但您已经知道,对吗?)。

重复之前的建议,您应该使用Wireshark(或等效的)来确定消息是否离开客户端计算机。你可以从你的服务器开始,以确保那里没有任何有趣的事情发生;但是,如果在服务器端确实没有消息的痕迹,那么你需要提供某种客户端的工具来查看那里发生了什么。

答案 1 :(得分:3)

您始终可以使用tcpdumpwireshark来查看线路上发生的情况。事件如果您的问题不在TCP / IP级别,这些是非常有用的网络故障排除工具,无法学习。

答案 2 :(得分:2)

你对TCP的理解是正确的。 TCP为您的应用程序提供了一个数据流,您可以将数据写入其中并按顺序到达和到达。也就是说,或者当然,假设连接没有死亡,它可以。我建议使用像wireshark这样的程序,因为Nikolai建议确定正确的信息实际上是发送到正确的地址。然后我会利用服务器上的wireshark声明相同的东西。 B人与A人或您自己有什么联系? (无线等)

答案 3 :(得分:1)

尝试使用nc

从人员B向服务器发送消息(使用您自己的协议)

如果您可以隔离AS3套接字的客户端或服务器部分中的问题,那将是一个重要的步骤。

注意:几个月前我在一个项目中成功使用了Actionscript3套接字,只是稍微有点棘手的部分是正确设置域策略服务器。

一个疯狂的想法:也许用这个选项重新编译内核? 网络数据包丢弃警报服务(NET_DROP_MONITOR)免责声明:我从未尝试过这个..