最近在做一个类似QQ的小软件,我想使用Tudpsocket来进行局域网内消息广播,通知某个用户:‘我上线了’,我用D7下的Tudpsocket试了试,可怎么也接收不到消息,谁有例子给我一个,或帮帮我。
[email protected] 谢谢了!

解决方案 »

  1.   

    这是我的代码procedure TForm1.FormCreate(Sender: TObject);
    begin
    udpsocket1.LocalHost:='192.168.1.252';
    udpsocket1.LocalPort :='8063';
    udpsocket1.RemoteHost :='192.168.1.255';
    udpsocket1.RemotePort :='8063';
    udpsocket1.Open;
    end;
    procedure TForm1.UdpSocket1Receive(Sender: TObject; Buf: PAnsiChar;
      var DataLen: Integer);
    var
      s:string;
    begin
    udpsocket1.Receiveln(s);
    edit2.Text :=s;end;procedure TForm1.SpeedButton1Click(Sender: TObject);
    var
      s:string;
    begin
    s:=edit1.Text;
    udpsocket1.Sendln(s);
    end;可怎么也不触发UdpSocket1Receive事件,是不是我写错了?
    帮我改改吧!谢谢!
      

  2.   

    为什么要用udp啊?
    用tcp不是更好一点??
      

  3.   

    http://2ccc.com/article.asp?articleid=4
    看这个
      

  4.   

    udp不用连接,直接广播就可以了
    所以不用TCP我去那个网站看看谢谢大家了!!!!
      

  5.   

    那请问从哪里可以找到TNMUDP,我的是D7,没有这个组件,而且我也没有找到哪里可以下?
      

  6.   

    TNMUDP是Delphi 6.0才有的组件,D7没有。而D7的TUDPSocket的LocalPort搞不懂怎么个用法。建议楼主换用TIdUDPServer和TIdUDPClient。
      

  7.   

    那能告诉我TIdUDPServer和TIdUDPClient怎么用吗?
      

  8.   

    把nmudp所在的package  load进去就可以了,包名我忘记了,你自己查查,要不就改为TIdUDPServer
    或是Tudpsocket,都可以代替的,你了解他的思想就可以了
      

  9.   

    TIdUDPServer的例子:unit uServer;//Powered By Jadeluo, 2005/05/10interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Sockets, IdBaseComponent, IdComponent, IdUDPBase,
      IdUDPServer, IDSocketHandle;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        IdUDPServer1: TIdUDPServer;
        procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Self.Caption := 'Server';
      Memo1.Lines.Clear;
      IdUDPServer1.DefaultPort := 6666;
      IdUDPServer1.Active := True;
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      iLoop   : Integer;
      iSize   : Integer;
      bBuffer : array of Byte;
      sBuffer : String;
    begin
      iSize := AData.Size;
      SetLength (bBuffer, iSize);
      AData.ReadBuffer(bBuffer[0], iSize);
      sBuffer := ABinding.PeerIP + ' : ';
      for iLoop := 0 to iSize - 1 do
      begin
        sBuffer := sBuffer + chr(bBuffer[iLoop]);
      end;
      Memo1.Lines.Add(sBuffer);
    end;end.
      

  10.   

    TIdUDPClient的例子:unit uClient;//Powered By Jadeluo, 2005/05/10interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Sockets, IdBaseComponent, IdComponent, IdUDPBase,
      IDSocketHandle, IdUDPClient;type
      TForm1 = class(TForm)
        edtAddress: TEdit;
        edtContent: TEdit;
        IdUDPClient1: TIdUDPClient;
        Button2: TButton;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      Self.Caption := 'Client';
      edtAddress.Text := '192.168.1.255';
      edtContent.Text := 'Hello!';
    end;procedure TForm1.Button1Click(Sender: TObject);
      //通过Send方法来进行广播
    begin
      IdUDPClient1.Send(edtAddress.Text, 6666, edtContent.Text);
    end;procedure TForm1.Button2Click(Sender: TObject);
      //通过Broadcast方法来进行广播
    begin
      IdUDPClient1.Broadcast(edtContent.Text, 6666);
    end;end.