用udp如何接收从c写的udp server上发来的带有串和结构的报文.

illheart 2005-06-15 03:25:13
delphi写的udp客户段收到了报文,但不能获得完整的报文,只能取得前面的14位字符和结构中的第一个域,其他的不能得到,是不是\0的问题,如何解决!这里先谢谢了
...全文
69 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
何鲁青 2005-06-15
  • 打赏
  • 举报
回复
定义结构体阿,如果前20字节传送的是一个字符串,后20个每个字节代表一个意思(例如20个设备参数的告警情况),那么你就定义这么一个结构体
DataStruct = record
name:array[1..20] of char;
alarm:array[1..20] of byte;
end;
然后在程序中这么做
procedure TForm2.IdUDPServer1UDPRead(Sender: TObject; AData:
TStream;
const APeerIP: String; const APeerPort: Integer);
var
buff[0..1023] of char
RCVBuff:^DataStruct;//指向结构体的指针
begin
AData.Read(Buf,AData.Size);
RCVBuffer:=@buf[0];
showmessage(RCVBuffer^.name);
case RCVBuffer^.alarm[1] of
.......

end;
end;
///////////////不知道你明白了没有
illheart 2005-06-15
  • 打赏
  • 举报
回复
但是,我把它写到我定义的结构中就不行了,怎么能把对方给我传来的结构体也解出来
helodd 2005-06-15
  • 打赏
  • 举报
回复
一样的接收呀~~~

procedure TForm2.IdUDPServer1UDPRead(Sender: TObject; AData:
TStream;
const APeerIP: String; const APeerPort: Integer);
var
buff[0..1023] of char
begin
AData.Read(Buf,AData.Size);

//buf 里面的内容就是你想要的呀, 使用长度为adata.size

end;
end;
illheart 2005-06-15
  • 打赏
  • 举报
回复
可是不行呀!由于是c写的结构中是\0结尾,用showmessage只能看到前面的东西,其它的看不全,把接收到的添到记录中去呀!如何转换.
何鲁青 2005-06-15
  • 打赏
  • 举报
回复
不知道你是怎么判断接受到了多少的?如果用showmessage来看的话,判断出来的结果是不准确的
你可以自己定义一个足够长的buff来接受
buff[0..1023] of char
然后用发送端相同的结构体去套就可以了
illheart 2005-06-15
  • 打赏
  • 举报
回复
自己顶一下

1,593

社区成员

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

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