我现在用Delphi7自带的Indy,开发客户端,服务器程序。
客户端进行一个时间段的循环计算,每计算一个时间段,向服务器发送一条指令,告知该客户端这个时段已计算完毕,当所有客户端都计算完毕时,服务器端向客户端发一条指令,告诉其可以进行下一个时段的计算了。这样可以保证所有客户端计算都是同一个时段的。
我现在客户端是开2个线程,一个负责发送,一个负责接收。
客户端发送线程:
Procedure TThreadSend.Execute;
Begin
    While true Do
    Begin
        Sleep (10) ;
        If Not Terminated Then
        Begin
            If assigned (CalTwoDimentionRiverNet) Then
            Begin
                Synchronize (SendMsg) ;
            End;
        End;                            //if
    End;                                //while
End;
客户端接收线程:
Procedure TThreadRev.Execute;
Var
    strpacklen      : String;
    PackLen         : Integer;
Begin
    While true Do
    Begin
        If Not Terminated Then
        Begin
            If assigned (CalTwoDimentionRiverNet) Then
            Begin
                If Not CalTwoDimentionRiverNet.Client.Connected Then
                Begin
                    sleep (10) ;
                    Continue;
                End;
                strpacklen := CalTwoDimentionRiverNet.Client.ReadString (2) ;
                //消息长度
                PackLen := RevertInteger (strpacklen) ;
                CalTwoDimentionRiverNet.RevMsg := CalTwoDimentionRiverNet.Client.ReadString (PackLen-2) ;
                Synchronize (DecodeMsg) ;
            End;                        // if assigned ( GPSDevice ) then        End;                            // if not Terminated then
    End;                                //while
End;
服务器端接收是通过Server.OnExecute事件:
Procedure TLogicalRelation.ServerExecute (AThread : TIdPeerThread) ;
Var
    strpacklen      : String;
    PackLen         : Integer;
Begin
    strpacklen := AThread.Connection.ReadString (2) ;
    //消息长度
    PackLen := RevertInteger (strpacklen) ;
    TempRevMsg := AThread.Connection.ReadString (PackLen-2) ;
    TempClientIP := AThread.Connection.Socket.Binding.PeerIP;
    AThread.Synchronize (DecodeMsg) ;
End;
服务器端发送同客户端发送。
请问我这样写有何问题吗?
我现在碰到的问题是在时间段几百个循环后,服务器端会突然收不到某个客户端的消息,导致一直处于等待状态,无法继续计算。