可靠的有序消息,第一次不被客户端读取。 (Lidgren)

时间:2015-11-10 20:40:36

标签: c# lidgren

这可能有点长篇帖子

我有一个服务器和一个客户端,我有能力看到发送/记录消息并在两台机器上实时计数,所以我不必在VS2012中进行调试,

我在加利福尼亚州的另一台计算机上运行我的服务器,以便服务器和客户端使用完全不同的IP并通过互联网进行实时测试,他们正在使用DNS名称并解决它们。< / p>

两台物理PC都没有防病毒功能,也没有防火墙,两者都没有防火墙。

两台机器都安装了wireshark,用于在UDP端口29999上跟踪我的数据包

序列如何工作是客户端发送登录,服务器通过某些凭据验证客户端,服务器发送播放器信息(统计信息)

第一次启动服务器可执行文件时,消息会毫无失败地传递到客户端。每次

如果您重新启动客户端并再次尝试,则客户端不会收到消息。

1)server.exe上的计数器正常递增, 2)服务器上的服务器Wireshark显示发送的消息 3)客户端的Wireshark看到UDP数据包从适当的IP地址进入正确的端口

但client.exe消息计数器不会递增。

如果我在VS2012中以DEBUG模式运行客户端并设置断点,如下所示:

 while ((_NetworkIncomingMsg = _NetworkClient.ReadMessage()) != null)
                        {

                            ReadInTime = DateTime.Now; // <<-- break point here
                        // blah blah more code
}

它从未命中,没有收到任何消息。

重要的是要注意,如果我只是在while语句上的断点,是的它是触发,但是没有读取消息,因此它是null,因此跳过代码

我认为它与ReadServerMessages()方法的时间或位置有关。

我将ReadServerMessages()方法作为一个事件在Timer上触发,如下所示。计时器构造为每1.0毫秒启动一次。因为这在软件的每个其他部分都非常完美,包括在临时连接到专用服务器并不断发送数据包时。

public System.Timers.Timer ClientNetworkTick = new System.Timers.Timer(1.0);
 void update_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
                {
                    // Check if server sent new messages
                    try
                    {
                        ReadServerMessages();
                    }
                    catch (Exception ex)
                    {

                    }
                }

有什么想法?我遗漏的任何事情让我知道谢谢!

0 个答案:

没有答案