在serversocket接收数据的时候,从客户端连接到开始接收数据,直接可能会出现一个时间差,这个差之有时大有时小,9秒,11秒都可能出现,不知道这个是什么原因造成的,请各位帮忙分析一下,谢谢!
出现//××的两个地方!
procedure Tform1.ServerSocket1Accept(Sender: TObject;
  Socket: TCustomWinSocket);
var
    i : integer;
begin
    for i := 0 to (ServerSocket1.Socket.ActiveConnections-1) do
    begin
         if ServerSocket1.Socket.Connections[i].SocketHandle = Socket.SocketHandle then
         begin            
            section[i].linkTime := FormatDateTime('yyyy-mm-dd hh:mm:ss',Now) ;  //××记录客户端连接的时间
         end ;
    end ;
end ;-----
procedure Tfrom1.ServerSocket1ClientRead(Sender : TObject;
    Socket : TCustomWinSocket);
var
    i : integer;
    recstr : string;
    retstr : string ;    
    starttime : string ;
begin
    starttime := FormatDateTime('yyyy-mm-dd hh:mm:ss',now) ;   //××开始接收数据的时间
    recstr := Socket.ReceiveText;
    retstr := '' ;
    for i := 0 to (ServerSocket1.Socket.ActiveConnections-1) do
    begin
         if if ServerSocket1.Socket.Connections[i].SocketHandle = Socket.SocketHandle then
         begin
              ..... 
         end ;
    end ;
end ;

解决方案 »

  1.   

    tcp接收数据前的连接是有几步报文交换的。
    首先是客户端发syn包,服务端收到后会回个syn包,客户端再回个ACK,服务端再回个ack,这个连接才算建立成功,才能互相发送数据。
    如果建立过程中有报文丢失,会出现重传。
    估计是你的网络状况不太好,出现报文传递时延长甚至丢包,导致时间不一及过长的。另外,cpu也不是你一个程序所使用,中间可能出现任务进程切换,也会导致时间不一,但这种影响造成的误差不至于你说的那么大。