procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  M: TMemoryStream;
  str: string;
  MyStringList: TStringList;
  DataStringStream: TStringStream;
  s: String;
begin
  DataStringStream := TStringStream.Create('');
  M:=tMemoryStream.Create;
  M.LoadFromStream(Adata);
  MyStringList := TStringList.Create;
  M.position:=0;
  MyStringList.LoadFromStream(M);
  str:=Trim(MyStringList.Text);
  showmessage(str);
  showmessage(inttostr(abinding.peerport));
  showmessage(abinding.PeerIP);
 // ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, '000000000',100);
  try
  DataStringStream.CopyFrom(AData, AData.Size);
  s := 'Replied from ' + IdUDPServer1.LocalName + ' to "' + DataStringStream.DataString + '"';
  ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));
  finally
  DataStringStream.Free;
  end;
end;服务器端有固定ip,客户端传给服务器端的都行,怎样能做到让服务器段接收到一条消息后返回给当前客户端一条信息,客户端怎么接收.

解决方案 »

  1.   

    用多一對Server, ClientUDP, 來實現
    >>让服务器段接收到一条消息后返回给当前客户端一条信息,客户端怎么接收.
      

  2.   

    >>那没有固定ip的机子怎么设置
    能否設置成廣播數據包呢??收到的就回復!UPD, 應該沒有Server, Client之分啊, 但indy不知為何多了這樣一對!
      

  3.   

    Indy的UDP只是概念上的一对Server/Client.
    注意UdpServer有一个端口须要Bind,这个端口可以指定,而UdpClient的端口是自动指定的,所以udpclient若要等待返回数据,要以阻塞方式.
    事实上两端可以都用IdUdpServer来收发数据
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      IdUdpServer1.Send('127.0.0.1',1000,'Hello,World');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      IdUdpServer2.Send('127.0.0.1',999,'Hello,World');
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      Buffer : array[0..255] of char;
    begin
      Memo1.Lines.Add('Received: '+ABinding.PeerIP+' Port: '+IntToStr(ABinding.PeerPort));
      AData.Read(Buffer,255);
      Memo1.Lines.Add(Buffer);
    end;procedure TForm1.IdUDPServer2UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      Buffer : array[0..255] of char;
    begin
      Memo2.Lines.Add('Received: '+ABinding.PeerIP+' Port: '+IntToStr(ABinding.PeerPort));
      AData.Read(Buffer,255);
      Memo2.Lines.Add(Buffer);
    end;
      

  4.   

    to sxy_9761() 
    我这边得不到固定的ip地址,再说大家都是在同一个局域网中,我改怎么设置
      

  5.   

    在上面两个IdUdpServer,OnRead的后面加上:
    ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,Buffer,255);
    那么就会一直收发下去
      

  6.   

    服务端有固定IP吧服务端收到数据
    procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      Buffer : array[0..255] of char;
    begin
      Memo1.Lines.Add('Received: '+ABinding.PeerIP+' Port: '+IntToStr(ABinding.PeerPort));
      AData.Read(Buffer,255);
      Memo1.Lines.Add(Buffer);
      ABinding.Send(Buffer,StrLen(Buffer),0);
      ABinding.SendTo(ABinding.PeerIP,ABinding.PeerPort,Buffer,255);//这里可以发回给客户端
    end;
      

  7.   

    发送端procedure TForm1.Button3Click(Sender: TObject);
    var
      buffer : array[0..255] of char;
      ret : integer;
    begin
      IdUdpclient1.Send('Hello,World');
      ret := IdUdpClient1.ReceiveBuffer(buffer,255,3000);// 等待接收数据.
      if ret > 0 then
      showmessage(buffer);
    end;不好意思,上面的写错了.把这行去掉:
    ABinding.Send(Buffer,StrLen(Buffer),0);
      

  8.   


    do while xx>0
    begin    
        rect := self.UDPClient.ReceiveString();
        if rect = 'Error' then  exit;
      ....
    end;
      

  9.   

    你在两断各放一个SERVER,一个CLIENT,不就可以传输数据?