我用Indy TCP,做一个INTERNET通迅程序,但多个客户端同时防问服务器端时会产生错误,请问该怎么解决???

解决方案 »

  1.   

    参考indy demo 下的IdTCPDemo
    服务器自己维护连接的客户端信息,服务器会自动为每个客户端建立一个线程的呀。
    {------------------------------通讯客户端消息程-------------------------}
    type
        TClientMessageThread = class(TThread)
        private
            MsgCommand: string; //消息命令
            procedure HandleMessage;
        protected
            procedure Execute; override;
        end;
    {---------------------------------------------------------------------}if not IdClient.Connected then
        begin
           // 如何获得主机IP和Port
            IdClient.Host := Dm_send.ServerIP;
            IdClient.Port := Dm_send.ServerPort;
            try
                IdClient.Connect(10000);
                ClientThread := TClientMessageThread.Create(True);
                ClientThread.FreeOnTerminate := True;
                ClientThread.Resume;
            except
                on E: Exception do
                begin
                    MessageDlg('连接服务器错误:' + #13 + E.Message, mtError, [mbOk], 0);
                    Application.Terminate;
                end;
            end;
        endprocedure TClientMessageThread.Execute;
    begin
        try
            while not Terminated do
            begin
                if not Fm_Main_Client.IdClient.Connected then
                    Terminate
                else
                try
                    MsgCommand := Fm_Main_Client.IdClient.ReadLn();
                    Synchronize(HandleMessage);
                except
                end;
            end;
        except
        end;end;
    procedure TClientMessageThread.HandleMessage;
    var
        MsgID: Integer;
    begin
        MsgID := StrToInt(Trim(Copy(MsgCommand, 1, 2)));
        case MsgID of
            0: ;
            1: ;
          
        end;
    end;