小弟为这个问题郁闷阿。我想用udpserver ,udpclient做一个局域网发信息的东西,遇到如下问题:
服务器用这语句发出广播:udpserver.broadcase('hello world!',9394);
客户端用这语句接受广播:udpclient.ReceiveString(100);
或者:udpserver.ReceiveString(100);
上面的语句读不出广播的消息。
请问是什么回事啊,应该怎样才能读出"hello world"阿。

解决方案 »

  1.   

    unit udptest;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdUDPClient, IdBaseComponent, IdComponent, IdUDPBase,
      IdUDPServer,IdSocketHandle, Spin;type
      TForm1 = class(TForm)
        udps: TIdUDPServer;
        UdpC: TIdUDPClient;
        Button1: TButton;
        Edit1: TEdit;
        UDPMemo: TMemo;
        ip: TEdit;
        Label1: TLabel;
        port: TSpinEdit;
        Label2: TLabel;
        procedure udpsUDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.udpsUDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      DataStringStream: TStringStream;
      s: String;
    begin
      DataStringStream := TStringStream.Create('');
      try
      DataStringStream.CopyFrom(AData, AData.Size);
      UDPMemo.Lines.Add('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort));
      s := 'Replied from ' + udps.LocalName + ' to "' + DataStringStream.DataString + '"';
      ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, s[1], Length(s));
      finally
      DataStringStream.Free;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    udpc.Send(ip.Text,port.Value,edit1.Text);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      udps.DefaultPort:=2333 ;
      udps.Active:=true;
    end;end.