TUrlPck = record
UrlSize:Integer;
Url:PChar;
end;function sendData(Buffer:Pchar;size:integer):boolean;
begin
Result := send(FSocketHandle,tmpBuff^,Size,0) = size;
end;procedure EnterUrl;
var
url:TUrlPck;
url.Url := 'www.163.com';
url.UrlSize := 11;
sendData(@url,sizeof(TUrlPck) + 11);
end;接收端:
procedure DoProcessUrl(data:pchar:size:integer);
var
url:TUrlPck;
begin
Move(data^,url,Size); //url.url值不正确,其它值正常,为什么呢?我查看了TCP得到的原始char值和发送的值是一 样的,为什么move后会得不到值,我在发送端调用同样的move方法可以得到正确的值
end;
UrlSize:Integer;
Url:PChar;
end;function sendData(Buffer:Pchar;size:integer):boolean;
begin
Result := send(FSocketHandle,tmpBuff^,Size,0) = size;
end;procedure EnterUrl;
var
url:TUrlPck;
url.Url := 'www.163.com';
url.UrlSize := 11;
sendData(@url,sizeof(TUrlPck) + 11);
end;接收端:
procedure DoProcessUrl(data:pchar:size:integer);
var
url:TUrlPck;
begin
Move(data^,url,Size); //url.url值不正确,其它值正常,为什么呢?我查看了TCP得到的原始char值和发送的值是一 样的,为什么move后会得不到值,我在发送端调用同样的move方法可以得到正确的值
end;
UrlSize:Integer;
Url:PChar;
end;
不能这么写,而是要:
TUrlPck = record
UrlSize:Integer;
Url:array[0..255] of Char;
end;
或:
TUrlPck = record
UrlSize:Integer;
Url:string[255];
end;
为什么我在发送端用move就可以给结构体赋值?而且值正常?发送后就不行了?而且接收端得到的数据和发送出去的数据一个,就是调用move时结果不同
UrlSize:Integer;
Url:PChar;
end;
中,发送时,Url元素你只是发送了一个地址(PChar,指针类型),其实255个字节在包中是很小的.
如果你确实觉得浪费空间,可以这样:
type
PDWORD=^DWORD;
var
Buf: Pointer;
P: PDWORD;
PC: PChar;
begin
GetMem(Buf,255);
P:=Buf;
PC:=Pointer(DWORD(Buf)+SizeOf(DWORD));
P^:=UrlSize;//Url的长度
PC:=Url;//Url的内容字符.
sendData(Buf,UrlSize);
end;到了接收端,首先看接受内容的前4字节的大小,再来取后面的内容
我在发送端和接收端的数据都是一样的,我对过了,只是在调用move方法后,填充到结构中的pchar值不一样