在 C# 游戏的网络代码中,我发现系统返回负值的问题。任何人都可以找出原因或提供改进吗?

In net code for a C# game, I'm seeing an issue where the system is returning negatives. Can anyone spot why or offer improvements?

游戏的主要"Ping"/"Time"功能是这样的:

Net Code For Server - Time/Ping

在开关之外,TimeSync() 的功能如下:

private void TimeSync()
{
    YGConnection.Send("Time", DateTime.UtcNow.Millisecond);
}

它将当前UTCNow.Millisecond时间发送到服务器。

最后getTime()得到当前时间+服务器的偏移量。

private double getTime()
{
    return Math.Round((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds) + Offset;
}

一切正常,但产生的数字是这样的:

版本 0.1.5:服务器时间偏移:-486335789940 - Ping:-943491433067

服务器基本上发回 getTime(),但没有偏移量。我想知道负数是怎么回事,我是否可以做些什么来解决这个问题。

DateTime.Milliseconds 是当前秒内的毫秒数(千分之一秒)。如果你只比较毫秒,你会丢失任何信息,比如它发生的那一秒。

午夜 00:00:00.000

500 毫秒后是 00:00:00.500

500 毫秒后是 00:00:01.000

如果只是比较毫秒,前两次的差值是500。
最后两者之间的差异将为 -500。

您可能想要做的是 return 一个完整的 date/time 值,而不仅仅是毫秒。如果你减去 2 个 DateTime 对象,你会得到一个 TimeSpan object. From that you can find the TimeSpan.TotalMilliseconds 会告诉你这两个时间之间有多少毫秒,而不管已经过去了多少秒。