Indy10中IdtcpClient/Server怎么哟那
我看了Demo,它的用ssl,还要证书,不实用,太麻烦到底怎么用啊IdtcpClient/Server,I9里的到这里到底怎么设置呢?能不能给个简单点的demo,就是简单的
连接和传输啊?

解决方案 »

  1.   

    建议将问题移转至[网络通信]版块。对于使用TIdTCPServer/TIdTCPClient的实例网上有太多了,自己搜索一下。
      

  2.   

    我看了Demo,它的用ssl,还要证书,不实用,太麻烦
    ///////////
    你是不是看了SSL的那个例子啊那个例子是教你如果通过SSL访问验证基本上INDY 9 的例子可以转到INDY 10
      

  3.   

    你是不是看了SSL的那个例子啊那个例子是教你如果通过SSL访问验证基本上INDY 9 的例子可以转到INDY 10
    ////////////////
    没错不行的,会出错的,很多代码都不通用
    ///////
    留个QQ吧
    //////
    342875137
      

  4.   

    SERVER:
    procedure TfrmIndy.TCPServerConnect(AThread: TIdPeerThread);
    var
      HexStr: String;
      NewClient: PClient;
    begin
     // AThread1:=  AThread;  GetMem(NewClient, SizeOf(TClient));  NewClient.DNS         := AThread.Connection.LocalName;
      NewClient.Connected   := Now;
      NewClient.LastAction  := NewClient.Connected;
      NewClient.Thread      :=AThread;  AThread.Data:=TObject(NewClient);  try
        Clients.LockList.Add(NewClient);
      finally
        Clients.UnlockList;
      end;  //spSkinMemo2.Lines.Add(TimeToStr(Time)+' Connection from "'+NewClient.DNS+'"');
      //ShowString.TCPDNS :=TimeToStr(Time)+' Connection from "'+NewClient.DNS+'"';
      //LogMessage(2);
    end;procedure TfrmIndy.TCPServerExecute(AThread: TIdPeerThread);
    var
      SendStr:     String;
      ReceStr:     string;
    begin
        //                                          (*---------------------------------TCP 读数据------ *)
        AThread1:=AThread;
        ReceStr:=AThread.connection.CurrentReadBuffer;
        StartTag:= ReceStr[1];
        form1.spSkinMemo1.Lines.Add('包: '+StrToHexStr(ReceStr));end;procedure TfrmIndy.TCPServerDisconnect(AThread: TIdPeerThread);
    var
      ActClient: PClient;
    begin
      ActClient := PClient(AThread.Data);
      try
        Clients.LockList.Remove(ActClient);
      finally
        Clients.UnlockList;
      end;
      FreeMem(ActClient);
      AThread.Data := nil;
    end;procedure TfrmIndy.TCPServerCreate;
    begin
      Clients := TThreadList.Create;
      TCPServer := TIdTCPServer.Create(self);
      IdThreadMgrDefault1:=TIdThreadMgrDefault.Create(self);
      with TCPServer do
      begin
        onconnect:=TCPServerConnect;
        onDisconnect:=TCPServerDisconnect;
        onExecute:=TCPServerExecute;
        ThreadMgr:=IdThreadMgrDefault1;
        //defaultport:=5007;
        Active := true;
      end;
    end;procedure TfrmIndy.TCPServerClose;
    begin
      TCPServer.Active := False;
      Clients.Free;
    end;CLIENT:
    procedure TClientHandleThread.HandleInput;
    var
      i:integer;
      S:string;
      Result:string;
    begin
      //if CB.Command = 'MESSAGE' then
        ClientFrmMain.IncomingMessages.Lines.Add ('recestr :' + receStr);
      for I:=1 to Length(S) do
      begin
        if I=1 then
          Result:=IntToHex(Ord(S[1]),2)
        else Result:=Result+IntToHex(Ord(S[I]),2);
      end;
      ClientFrmMain.IncomingMessages.Lines.Add ('recestr :' + Result);
      {//else
      if CB.Command = 'DIALOG' then
        MessageDlg ('"'+CB.MyUserName+'" sends you this message:'+#13+CB.Msg, mtInformation, [mbOk], 0)
      else  // unknown command
        MessageDlg('Unknown command "'+CB.Command+'" containing this message:'+#13+CB.Msg, mtError, [mbOk], 0);
    }end;procedure TClientHandleThread.Execute;
    begin
      while not Terminated do
      begin
        if not ClientFrmMain.Client.Connected then
          Terminate
        else
        try
          //receStr:=ClientFrmMain.Client.CurrentReadBuffer;
          ClientFrmMain.Client.ReadBuffer(receStr, SizeOf (receStr));
          Synchronize(HandleInput);
        except
        end;
      end;
    end;procedure TClientFrmMain.CBClientActiveClick(Sender: TObject);
    begin
      if CBClientActive.Checked then
      begin
        try
          Client.Connect(10000);  // in Indy < 8.1 leave the parameter away      ClientHandleThread := TClientHandleThread.Create(True);
          ClientHandleThread.FreeOnTerminate:=True;
          ClientHandleThread.Resume;
        except
          on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
        end;
      end
      else
      begin
        ClientHandleThread.Terminate;
        Client.Disconnect;
      end;  ButtonSend.Enabled := Client.Connected;
      CBClientActive.Checked := Client.Connected;
    end;procedure TClientFrmMain.ButtonSendClick(Sender: TObject);
    var
      CommBlock : TCommBlock;
      Sendstr: array[1..25] of char;
    begin
      sendstr[1]:=char($7B);sendstr[2]:=char($01);
      sendstr[3]:=char($00);sendstr[4]:=char($16);
      sendstr[5]:=char($31);sendstr[6]:=char($30);sendstr[7]:=char($31);sendstr[8]:=char($30);sendstr[9]:=char($31);sendstr[10]:=char($30);sendstr[11]:=char($31);sendstr[12]:=char($30);sendstr[13]:=char($31);sendstr[14]:=char($30);sendstr[15]:=char($31);
      sendstr[16]:=char($DA);sendstr[17]:=char($5E);
      sendstr[18]:=char($1A);sendstr[19]:=char($A4);sendstr[20]:=char($13);sendstr[21]:=char($8F);
      sendstr[22]:=char($7B);
      //7B 01 0016 3130313031303130313031 DA5E 1AA4 138F 7B  Client.WriteBuffer (sendstr, 22, true);
    end;