一个关于API发送一个UDP包(定义的一个结构)的问题。

summer1978 2002-11-29 12:29:35
FIRST:
定义个结构:
Type
TDataFormat=packed record
a:Byte;
b:Byte;
c:array[0..1] of byte;
d:array [0..512] of char;
end;
然后开始:
var
tmp:TDataFormat;
tmp1:TMemoryStream;
str:string;
i:integer;
begin
str:='abcdefghdsddddddddddddddddddddddddddddd';
with tmp do
begin
a:=$30;
b:=1;
c[0]:=0;
c[1]:=Length(str);
for i:=0 to 10 do
Stream[i]:=(str[i+1]);
end;
str:=inttostr(tmp.Head)+inttostr(tmp.SerNumber)+tmp.stream;
tmp1:=TMemoryStream.Create;
//*******************************************//
tmp1.WriteBuffer(tmp,sizeof(tmp)) ;
//*******************************************//
FSockAddrIn.SIn_Addr.S_addr := inet_addr(PChar('172.18.16.1')); ;
FSockAddrIn.SIn_Port := htons(strtoint('8888'));
sendto(sock, tmp1.memory^, tmp1.Size, 0, FSockAddrIn, sizeof(FSockAddrIn));
tmp1.Free;
end;
当我运行后,在服务端获得我发出去的包没有IP/PORT。
但是我改成这样不发送结构,发送一个字符串就没问题。

tmp1:=TMemoryStream.Create;
//*******************************************//
tmp1.Write(str[1],sizeof(str)) ;
//*******************************************//
FSockAddrIn.SIn_Addr.S_addr := inet_addr(PChar('172.18.16.1')); ;
FSockAddrIn.SIn_Port := htons(strtoint('8888'));
sendto(sock, tmp1.memory^, tmp1.Size, 0, FSockAddrIn, sizeof(FSockAddrIn));
请问高手有谁知道是什么原因?是不是关于流在写入一个结构的时候的问题呀,
望指明,谢谢。

...全文
43 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
shujian 2002-11-29
  • 打赏
  • 举报
回复
thinking...

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧