客户端和服务器之间的时钟同步/Python

时间:2021-04-16 10:31:42

标签: python sockets synchronization

我有一个愚蠢的问题,希望您能帮我澄清一下。我对这类事情很陌生,所以如果我也没有使用正确的术语,我深表歉意。

我有两台独立的 Windows PC 通过网络相互连接。一种是服务器,一种是客户端。客户端在不同的时间点向服务器发送时间戳。我通过 Python 中的套接字编程建立了两者之间的通信,一切正常。

客户端将时间戳发送给服务器,服务器将时间戳发送回客户端。

我现在需要估计客户端和服务器之间的延迟(往返行程时间)和时钟偏移。但是我对如何做到最好感到非常困惑,我不确定我是否应该使用来自 time.time() 的时间戳或来自 datetime.utcnow() 的时间或来自 datetime.now() 的本地时间.

我在下面包含了我的代码,我现在基本上保存了所有内容(我跳过了套接字位)。但是我很困惑我应该使用哪个“时间”来计算 rt_delay 和 ClockOffs。请问您有什么建议吗?你认为这是正确的吗?

非常感谢!

    import socket
    import time
    from datetime import datetime
    
    #s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) [....]
    
    # Sent timestamp to Client
    SentTime0_UTC =datetime.utcnow()
    SentTime0_local = datetime.now()
    t0 = time.time()
    message = str(("%.5f" % t0, str(SentTime0_UTC), str(SentTime0_local)))
    
    s.sendto(message.encode('utf-8'), (Server_IP, Server_port[0])) # Send Message to Server
    data, addr = s.recvfrom(1024)  # Receive from Server
    # Server replies with its one time.time(), datetime.utcnow(), datetime.now()
    t2 = time.time()  # Received timestamp Client
    RecTime3_UTC =datetime.utcnow() # Received Date UTC
    RecTime3_local = datetime.now() # Received Date Local
    
    data = data.decode('utf-8')
    splitdata = data.split(',')
    t0 = splitdata[0].strip("('")  # This is t0 - Client Sent Time
    t1 = splitdata[3].strip("('")  # This t1 - Server Received Time
    ClientTimeDate_UTC = splitdata[4].strip("('")  # This t1 - Server Received Time Date UTC
    ClientTimeDate_Local = splitdata[5].strip("('")  # This t1 - Server Received Time Date Local
    
    rt_delay=(t2-t0) # Round Trip Delay
    ClockOffs=( (t0-t1) - (t1-t2))/2 # Clock Offset

0 个答案:

没有答案