发送代码: 
    IdTCPClient1.Host := '127.0.0.1'; 
    IdTCPClient1.Port := 80; 
    IdTCPClient1.Connect; 
    IdTCPClient1.WriteBuffer(ms,ms.Size, true); 
发送数据之后,是用IdTCPClient1.ReadBuffer(mp.memory^,mp.Size);接收数据吗?可是用这段代码后,就死机了,程序没响应,怎么解决呢? 

解决方案 »

  1.   

    分不够可以增加。说明一下服务端是其它的网络软件服务器,不是用IdTCPServer做的。我用Iris来载取数据,已知道发送成功,而且服务器也返回信息了,但用IdTCPClient1.ReadBuffer(mp.memory^,mp.Size);就是接收不到,怎么才能接收呢?
      

  2.   

    与IdTCPClient配套的是IdTCPServer,在它的OnExecute事件中你可以这样接收数据:
        with AThread.Connection do
        begin
          ReadBuffer(Buffer,Buffersize);
        end;
    当然现实中并是这么简单,这里给你举个例子吧。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection,
      IdTCPClient, StdCtrls;type
      TForm1 = class(TForm)
        IdTCPClient1: TIdTCPClient;
        IdTCPServer1: TIdTCPServer;
        SendBtn: TButton;
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure IdTCPServer1Execute(AThread: TIdPeerThread);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure SendBtnClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      with IdTCPServer1 do
      begin
        Bindings.Clear;
        Bindings.Add.Port:=1981;
        Active:=True;
      end;
      with IdTCPClient1 do
      begin
        Host:='127.0.0.1';
        Port:=1981;
        Connect;
      end;
    end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      DataSize:Integer;
      Buffer:String;
    begin
      with AThread.Connection do
      begin
        DataSize:=ReadInteger;
        SetLength(Buffer,DataSize);
        ReadBuffer(Buffer[1],DataSize);
        Memo1.Lines.Add(Buffer);
      end;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      IdTCPClient1.Disconnect;
    end;procedure TForm1.SendBtnClick(Sender: TObject);
    var
      Buffer:String;
    begin
      Buffer:='Test send buffer...';
      with IdTCPClient1 do
      begin
        WriteInteger(Length(Buffer));
        WriteBuffer(Buffer[1],Length(Buffer),True);
      end;
    end;end.
      

  4.   

    问题是,我的服务端不是我做的,也不是用IdTcpServer做的,是其它的应用软件,我只是模拟向它发送数据包而已,如果客户端和服务端都是自已做的,就没这么麻烦了。
      

  5.   

    客户端用线程读取数据
    j建立个线程,读数据~ 看indy 提供的Demo~-----------------------------------------------------------------------------------------------------------------------------------------
    CSDN小猪手:方便查看,快速回复~~速度++~~~
    下载:
    http://www.vickyjam.com/blog/lbs/article.asp?id=165
      

  6.   

    已尝试用线程接收,也收不到。indy的Demo已看过了,不能解决问题。
        IdTCPClient1.Host := '127.0.0.1'; 
        IdTCPClient1.Port := 80; 
        IdTCPClient1.Connect; 
        IdTCPClient1.WriteBuffer(ms,ms.Size, true); 
        IdTCPClient1.ReadBuffer(mp.memory^,mp.Size);//在这里接收,死机,没响应。  
      

  7.   

    首先确认一下你的客户端是否真正连上。再者即使服务器端不是你写的至少也要知道对方的协议(比如数据包的长度,或着数据格式),Indy是阻塞通讯模式,因此如果你在不知道通讯协议就会出现阻塞。
      

  8.   

    看你使用了80断口恐怕对方是个WEB服务器,你不是要做代理服务器吧 ^_^
      

  9.   

    服务端必须是IDTCPSERVER吧
    要是别的即使对CLIENT开放了端口,服务端又怎么知道如何处理CLIENT传来的信息呢
    除非像楼上讲的你要做代理服务器啊