我有一个基于 tcp/ip 协议的服务器客户端应用程序,其中服务器和客户端都以不同的速率运行。我使用 Carmaker 作为服务器和一些 C 模块作为客户端从它接收数据。我的客户每 20 毫秒运行一次[根据项目],而 Carmaker 每 1 毫秒运行一次它的内部功能,如果我们需要,可以使用暂停情况。
我需要让服务器和客户端同步,当客户端处理它是 20 毫秒的步骤时,Carmaker 将完成它的 1 毫秒的 20 个步骤。即我想暂停汽车制造商,直到客户完成它的过程。
我正在将客户端时钟时间发送到服务器并在服务器内实现以下代码。
case SCState_Simulate:
if ((rv=App_TestRun_Calc(DeltaT)) != 0)
SimCore_State_Set (SCState_End);
//if((SimCore.CycleNo - start_cycle_)>runto_cycle_){
//Log("IfLessthanSimulate: %d\n", SimCore.CycleNo);
//}
//Log("StartSimulate: %d\n", SimCore.CycleNo);
Log("Simulate Carmakertime: %ld Clienttime: %ld in milliseconds\n", carmaker_time_ms,client_time_ms );
SimCore_State_Set(carmaker_time_ms<=client_time_ms ? SCState_Simulate : SCState_Pause);
break;
case SCState_Pause:
// wait for continue
//Log("Pause: %d\n", SimCore.CycleNo);
Log("Pause Carmakertime: %ld Clienttime: %ld in milliseconds\n", carmaker_time_ms,client_time_ms );
SimCore_State_Set(carmaker_time_ms<=client_time_ms ? SCState_Simulate : SCState_Pause);
break;
在客户端,我正在接收服务器时间并等待 carmaker_time_ms<client_time_ms 然后将客户端时间发送到汽车制造商服务器。
请您帮忙修改并告诉我如何使服务器和客户端同步。