我自己写的东西
type
  TMember =  record
    filename: string[2];
    hpzl: string[2];
    cd: string[2];
    hphm: string[2];
    wfsj: string[2];
  end;procedure TForm1.UDPServerUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  dd:TMember;
begin
    AData.Read(dd,adata.Size);
    UDPMemo.Lines.Add(dd.filename);
    UDPMemo.Lines.Add(dd.hpzl);
    UDPMemo.Lines.Add(dd.cd);
    UDPMemo.Lines.Add(dd.hphm);
    UDPMemo.Lines.Add(dd.wfsj);
end;CLient发送 '05 53 5F 4D 73'
运行后 怎么结果是这样的?
5 53 5F 4D 73
3 5F 4D 73
F 4D 73
D 73
3我想要的结果是
05
53
5F
4D
73

解决方案 »

  1.   

    procedure MoveStr(const Source:string; var Dest; count:integer);
    begin
      if Source='' then Exit;
      if Length(Source)>count then
        Move(Source[1],Dest,count)
      else
        Move(Source[1],Dest,Length(Source));
    end;
      

  2.   

    谢谢楼上,
    我觉得idUDPserver可以处理啊。 我是不是哪个地方写错了
      

  3.   


    给你写了个测试程序,你看看吧
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdUDPClient, IdBaseComponent, IdComponent, IdUDPBase,
      IdUDPServer,IdSocketHandle;type
      TMember =  record
        filename: string[2];
        hpzl: string[2];
        cd: string[2];
        hphm: string[2];
        wfsj: string[2];
      end;
      TForm1 = class(TForm)
        IdUDPServer1: TIdUDPServer;
        IdUDPClient1: TIdUDPClient;
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
          ABinding: TIdSocketHandle);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      Member:TMember;
    begin
      Member.filename:='05';
      Member.hpzl:='53';
      Member.cd:='5F';
      Member.hphm:='4D';
      Member.wfsj:='73';
      self.IdUDPClient1.SendBuffer('127.0.0.1',99999,Member,SizeOf(TMember));
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      self.IdUDPServer1.DefaultPort:=99999;
      self.IdUDPServer1.Active:=true;
    end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
      ABinding: TIdSocketHandle);
    var
      MemoryStream:TMemoryStream;
      Member:TMember;
    begin
      MemoryStream:= TMemoryStream.Create;
      try
        MemoryStream.CopyFrom(AData,AData.Size);
        MemoryStream.Seek(0,soFromBeginning);
        MemoryStream.ReadBuffer(Member,SizeOf(TMember));
        Memo1.Lines.Add(Member.filename);
        Memo1.Lines.Add(Member.hpzl);
        Memo1.Lines.Add(Member.cd);
        Memo1.Lines.Add(Member.hphm);
        Memo1.Lines.Add(Member.wfsj);
      finally
        MemoryStream.Free;
      end;
    end;end.
      

  4.   

    关键UDPCLIENT不是我写的。我不确定他是不是用你这种方式发送的。所以 接收的时候报 ABstact Error
      

  5.   

    我按照上面的写了如下代码:type
      TClientSessionInfor = record //客户端会话信息
         strIp:   string;
         strPort: string;
         strIndex: string;     
      end;发送端:
      Session: TClientSessionInfor;  Session.strIp := ABinding.PeerIP; //客户端IP
      Session.strPort := IntToStr(ABinding.PeerPort);//客户端端口
      Session.strIndex := '在线';
      ABinding.SendTo(Session.strIp,StrToInt(Session.strPort),Session,SizeOf(TClientSessionInfor));//给客户端回馈成功连接信息接收端:  Session: TClientSessionInfor;
      MemoryStream:TMemoryStream;  try
        MemoryStream.CopyFrom(AData,AData.Size);
        MemoryStream.Seek(0,soFromBeginning);
        MemoryStream.ReadBuffer(Session,SizeOf(TClientSessionInfor));
        Memo1.Lines.Add(Session.strIndex);//跟踪发现这里的数据是:inaccessible value,为何?
      finally
        MemoryStream.Free;
      end;