unit ClnUnit;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, NMUDP, StdCtrls;type
  TClient = class(TForm)
    CUDP: TNMUDP;
    procedure CUDPDataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: string; Port: Integer);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Client: TClient;implementationvar
  SendStream: TFileStream;{$R *.dfm}procedure TClient.CUDPDataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: string; Port: Integer);
var
  CtrlCode: array[0..29] of char;
begin
  CUDP.ReadBuffer(CtrlCode, NumberBytes);
  if CtrlCode[0] + CtrlCode[1] + CtrlCode[2] + CtrlCode[3] = 'Send' then
  begin
    CUDP.RemoteHost := FromIP;
    CUDP.SendStream(SendStream);
  end;
end;procedure TClient.FormCreate(Sender: TObject);
begin
  SendStream := TFileStream.Create('c:\BOOTEX.LOG', fmOpenRead);
end;procedure TClient.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SendStream.Free ;
end;end.

解决方案 »

  1.   

    unit serUnit;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, NMUDP;type
      TServer = class(TForm)
        Button1: TButton;
        NMUDP: TNMUDP;
        procedure Button1Click(Sender: TObject);
        procedure NMUDPDataReceived(Sender: TComponent; NumberBytes: Integer;
          FromIP: string; Port: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Server: TServer;
      TmpStream: TMemoryStream;
      SendStream: TFileStream;
    implementation{$R *.dfm}procedure TServer.Button1Click(Sender: TObject);
    begin
      try
        SendStream := TFileStream.Create('c:\BOOTEX.LOG', fmOpenRead);
        NMUDP.RemoteHost := '127.0.0.1';
        NMUDP.SendStream(SendStream);
      finally
        SendStream.Free;
      end;
    end;procedure TServer.NMUDPDataReceived(Sender: TComponent;
      NumberBytes: Integer; FromIP: string; Port: Integer);
    begin
      try
        TmpStream := TMemoryStream.Create;
        NMUDP.ReadStream(TmpStream);
        TmpStream.SaveToFile('d:\bootex.txt');
      finally
        TmpStream.Free;
      end;
    end;end.
      

  2.   

    只要你对这个控件的基本用法有了了解,实现文件传递应该不难呀。基本思路就是,把文件读入流,然后通过端口发送出去,接收端通过端口接收。在这个基础上,你还可以加入更多的功能,比如你就可以对流的内容自己定一个协议,假设说以"<ask>"开头的就是用户端的请求,接收端必须对这个请求接受或拒绝。其实你做起来就会发现,挺简单的。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Buttons, StdCtrls, NMUDP;type
      TForm1 = class(TForm)
        NMUDP1: TNMUDP;
        procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
          FromIP: String; Port: Integer);
        procedure NMUDP1BufferInvalid(var handled: Boolean;
          var Buff: array of Char; var length: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
      NumberBytes: Integer; FromIP: String; Port: Integer);
    var
      vMemoryStream: TMemoryStream;
    begin
      vMemoryStream := TMemoryStream.Create;
      try
        NMUDP1.ReadStream(vMemoryStream);
        vMemoryStream.Position := 0;
        vMemoryStream.SaveToFile('c:\temp.dat');
      finally
        vMemoryStream.Free;
      end;
      end;
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Buttons, StdCtrls, NMUDP;type
      TForm1 = class(TForm)
        NMUDP1: TNMUDP;
        Edit1: TEdit;
        SpeedButton1: TSpeedButton;
        OpenDialog1: TOpenDialog;
        SpeedButton2: TSpeedButton;
        procedure SpeedButton1Click(Sender: TObject);
        procedure SpeedButton2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      myfile:tfilestream;
      filename:string;implementation{$R *.dfm}procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
    opendialog1.Filter:='*.*|*.*';
    if opendialog1.Execute then
    begin
    filename:=opendialog1.FileName;
    myfile:=tfilestream.Create(filename,fmopenread);
    end;
    end;procedure TForm1.SpeedButton2Click(Sender: TObject);
    begin
    NMUDP1.RemoteHost:=edit1.text;
    myfile.Position := 0;
    NMUDP1.SendStream(myfile);
    end;end.