给你一个例子。Pas文件
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, NMUDP, ExtCtrls;type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    eRemoteHost: TEdit;
    eLocalPort: TEdit;
    eRemotePort: TEdit;
    eSendData: TEdit;
    Button2: TButton;
    Label5: TLabel;
    ePort: TEdit;
    Memo1: TMemo;
    udpSender: TNMUDP;
    udpReceiver: TNMUDP;
    bListen: TButton;
    Memo2: TMemo;
    Button6: TButton;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    lSLport: TLabel;
    lRLport: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure bListenClick(Sender: TObject);
    procedure udpReceiverDataReceived(Sender: TComponent;
      NumberBytes: Integer; FromIP: String; Port: Integer);
    procedure udpSenderStatus(Sender: TComponent; status: String);
    procedure udpReceiverStatus(Sender: TComponent; status: String);
    procedure FormCreate(Sender: TObject);
    procedure udpSenderInvalidHost(var handled: Boolean);
    procedure udpSenderDataReceived(Sender: TComponent;
      NumberBytes: Integer; FromIP: String; Port: Integer);
  private    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;procedure TForm1.Button2Click(Sender: TObject);
var
  SendData:Array[0..1024] of char;//最大值不能超过1024;
  i,Len:Integer;
begin
  Len:=Length(eSendData.Text);
  If Len=0 then Exit;
  for i:=0 to Len do SendData[i]:=eSendData.Text[i+1];
  udpSender.RemoteHost:=eRemoteHost.Text;
  udpSender.LocalPort:=StrtoInt(eLocalPort.Text);
  udpSender.RemotePort:=StrtoInt(eRemotePort.Text);
  udpSender.SendBuffer(Senddata,Len);
  lSLport.Caption:=IntToStr(udpSender.LocalPort);
end;procedure TForm1.bListenClick(Sender: TObject);
begin
  udpReceiver.LocalPort:=StrtoInt(ePort.Text);
  lRLport.Caption:=IntToStr(udpReceiver.LocalPort);
end;procedure TForm1.udpReceiverDataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  ReadData:Array[0..1024] of char;
  Str:String;
  i:integer;
begin
  if NumberBytes>0 then
    Begin
      udpReceiver.ReadBuffer(ReadData,NumberBytes);
      SetLength(Str,NumberBytes);
      for i:=0 to NumberBytes do Str[i+1]:=ReadData[i];
      Memo1.Lines.Add('IP:'+FromIP+' P:'+Inttostr(Port)+' Msg:'+Str);
    end;
end;procedure TForm1.udpSenderStatus(Sender: TComponent; status: String);
begin
  Memo2.Lines.Add('Sender Status:'+Status);
end;procedure TForm1.udpReceiverStatus(Sender: TComponent; status: String);
begin
  Memo2.Lines.Add('Receiver Status:'+Status);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  udpSender.ReportLevel:=Status_Basic;
  udpReceiver.ReportLevel:=Status_Basic;
end;procedure TForm1.udpSenderInvalidHost(var handled: Boolean);
begin
  Memo2.Lines.Add('Receiver Error:InvalidHost');
end;procedure TForm1.udpSenderDataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  ReadData:Array[0..1024] of char;
  Str:String;
  i:integer;
begin
  if NumberBytes>0 then
    Begin
      udpSender.ReadBuffer(ReadData,NumberBytes);
      SetLength(Str,NumberBytes);
      for i:=0 to NumberBytes do Str[i+1]:=ReadData[i];
      Memo1.Lines.Add('Is Received By Sender IP:'+FromIP+' P:'+Inttostr(Port)+' Msg:'+Str);
    end;
end;end.Dfm文件。
object Form1: TForm1
  Left = 134
  Top = 99
  BorderIcons = [biSystemMenu, biMinimize]
  BorderStyle = bsSingle
  Caption = 'UDPSample'
  ClientHeight = 342
  ClientWidth = 576
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object GroupBox1: TGroupBox
    Left = 9
    Top = 4
    Width = 361
    Height = 131
    Caption = 'Sender'
    TabOrder = 0
    object Label1: TLabel
      Left = 10
      Top = 26
      Width = 101
      Height = 13
      Caption = 'Decipient'#39's Name/IP:'
    end
    object Label2: TLabel
      Left = 89
      Top = 49
      Width = 22
      Height = 13
      Caption = 'Port:'
    end
    object Label3: TLabel
      Left = 49
      Top = 73
      Width = 62
      Height = 13
      Caption = 'Remote Port:'
    end
    object Label4: TLabel
      Left = 65
      Top = 96
      Width = 46
      Height = 13
      Caption = 'Message:'
    end
    object eRemoteHost: TEdit
      Left = 113
      Top = 21
      Width = 89
      Height = 21
      TabOrder = 0
      Text = '192.168.0.3'
    end
    object eLocalPort: TEdit
      Left = 113
      Top = 45
      Width = 48
      Height = 21
      TabOrder = 1
      Text = '5000'
    end
    object eRemotePort: TEdit
      Left = 113
      Top = 70
      Width = 49
      Height = 21
      TabOrder = 2
      Text = '6000'
    end
    object eSendData: TEdit
      Left = 113
      Top = 94
      Width = 240
      Height = 21
      TabOrder = 3
      Text = 'This is a Test for UDP!!'
    end
    object Button2: TButton
      Left = 270
      Top = 17
      Width = 75
      Height = 25
      Caption = '&Send Data'
      TabOrder = 4
      OnClick = Button2Click
    end
  end
  object GroupBox2: TGroupBox
    Left = 8
    Top = 136
    Width = 361
    Height = 201
    Caption = 'Receiver'
    TabOrder = 1
    object Label5: TLabel
      Left = 7
      Top = 22
      Width = 22
      Height = 13
      Caption = 'Port:'
    end
    object ePort: TEdit
      Left = 34
      Top = 19
      Width = 48
      Height = 21
      TabOrder = 0
      Text = '6000'
    end
    object Memo1: TMemo
      Left = 8
      Top = 49
      Width = 337
      Height = 143
      ScrollBars = ssBoth
      TabOrder = 1
    end
    object bListen: TButton
      Left = 272
      Top = 19
      Width = 75
      Height = 25
      Caption = '&Listen'
      TabOrder = 2
      OnClick = bListenClick
    end
  end
  object GroupBox3: TGroupBox
    Left = 378
    Top = 3
    Width = 191
    Height = 289
    Caption = 'Winsock Information'
    TabOrder = 2
    object Label6: TLabel
      Left = 8
      Top = 125
      Width = 35
      Height = 13
      Caption = 'Report:'
    end
    object Label7: TLabel
      Left = 20
      Top = 46
      Width = 92
      Height = 13
      Caption = 'Sender'#39's LocalPort:'
    end
    object Label8: TLabel
      Left = 11
      Top = 64
      Width = 101
      Height = 13
      Caption = 'Receiver'#39's LocalPort:'
    end
    object lSLport: TLabel
      Left = 115
      Top = 46
      Width = 3
      Height = 13
    end
    object lRLport: TLabel
      Left = 114
      Top = 64
      Width = 3
      Height = 13
    end
    object Memo2: TMemo
      Left = 5
      Top = 144
      Width = 180
      Height = 137
      ScrollBars = ssBoth
      TabOrder = 0
    end
  end
  object Button1: TButton
    Left = 483
    Top = 307
    Width = 75
    Height = 25
    Caption = 'E&xit'
    TabOrder = 3
    OnClick = Button1Click
  end
  object Button6: TButton
    Left = 394
    Top = 307
    Width = 75
    Height = 25
    Caption = '&Help'
    TabOrder = 4
  end
  object udpSender: TNMUDP
    RemotePort = 0
    LocalPort = 0
    ReportLevel = 1
    OnDataReceived = udpSenderDataReceived
    OnStatus = udpSenderStatus
    OnInvalidHost = udpSenderInvalidHost
    Left = 384
    Top = 200
  end
  object udpReceiver: TNMUDP
    RemotePort = 0
    LocalPort = 0
    ReportLevel = 1
    OnDataReceived = udpReceiverDataReceived
    OnStatus = udpReceiverStatus
    Left = 416
    Top = 200
  end
end你可以用上面的文本生成一个工程了,看看就知道了!!

解决方案 »

  1.   

    buffer不要定义成string
    buffer:array [0..1023] of char
    还有clientsocket.socket.receivebuf(buffer,clientsocket.socket.receivelength)
    这句最好这样写
    len:integer;
    clientsocket.socket.receivebuf(buffer,len);
    最后你的richedit.text文件最好用blockread(filename,buffer,sizeof(buf),.......)读出来
      

  2.   

    to thunderbolt:
      blockread(filename,buffer,sizeof(buffer))中filename用来干什么的?
      

  3.   

    to thunderbolt:
      blockread(filename,buffer,sizeof(buffer))中filename用来干什么的?我到现在还没弄明白socket.receivebuf()到底是怎么工作的?他是不是在执行socket.receivebuf()一举时,把全部的信息都接收完了?尤其是在接受结构数组的时候???
    谢谢!
      

  4.   

    接收端用socket.connection[0].receivebuf()就行了