现在需要用写一个接收UDP包的服务端.用TUdpSocket以后老是接收不到数据,是因为什么啊?请指教一下.或者用别的什么也可以

解决方案 »

  1.   

    1.检查一下你的UDPSOCKET,是否正确地初始化并已经监听UDP端口
    2.检查一下你的UDP发送端,是否正确地发送数据;像网络传输的调试,都要双向检查的,一边检查完,便排除,再检查另一边
      

  2.   

    unit Unit_UDP;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle,
      IdAntiFreezeBase, IdAntiFreeze, Gauges, StdCtrls, IdUDPClient;type
      TForm_UDP = class(TForm)
        IdUDPServer1: TIdUDPServer;
        grp1: TGroupBox;
        grp2: TGroupBox;
        mmo1: TMemo;
        edt1: TEdit;
        lbl1: TLabel;
        btn1: TButton;
        IdUDPClient1: TIdUDPClient;
        Label1: TLabel;
        Label2: TLabel;
        lbl2: TLabel;
        edt4: TEdit;
        Button1: TButton;
        edt2: TEdit;
        edt3: TEdit;
        edt5: TEdit;
        lbl3: TLabel;
        procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;ABinding: TIdSocketHandle);
        procedure btn1Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form_UDP: TForm_UDP;implementation{$R *.dfm}procedure TForm_UDP.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    Var
      Str:String;
    begin
      AData.Seek(0,0);
      SetLength(Str,AData.Size);
      AData.Read(Str[1],AData.Size);
      mmo1.Lines.Add(str);
      str:= 'message has received';
      ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort,Str[1] , Length(Str));
    end;procedure TForm_UDP.btn1Click(Sender: TObject);
    begin
      IdUDPServer1.DefaultPort:=StrToInt(edt1.Text);
      IdUDPServer1.Active:=True;
    end;procedure TForm_UDP.Button1Click(Sender: TObject);
    Var
      ReceivedString:String;
    begin
        IdUDPClient1.Host:=edt2.Text;
        IdUDPClient1.Port:=StrToInt(edt3.Text);
        IdUDPClient1.Active:=True;
        IdUDPClient1.Send(edt4.text);
        ReceivedString := IdUDPClient1.ReceiveString();
        edt5.Text:=ReceivedString;
    end;end.