我自己写的东西
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
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
begin
if Source='' then Exit;
if Length(Source)>count then
Move(Source[1],Dest,count)
else
Move(Source[1],Dest,Length(Source));
end;
我觉得idUDPserver可以处理啊。 我是不是哪个地方写错了
给你写了个测试程序,你看看吧
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.
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;