一个关于IdUDPServer 的数据流问题。(50分)

  • 主题发起人 主题发起人 ihweb
  • 开始时间 开始时间
I

ihweb

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject;
AData: TStream;
ABinding: TIdSocketHandle);
Var
RxData:array of byte;
begin
AData.Seek(0,0);
SetLength(RxData,AData.size);
AData.Read(RxData,AData.size);
if RxData[0]=$00 then
Showmessage('OK');
end;

1、程序编译运行没出错。
2、当另一机器用 InUDPClient 来发包给他的时候,出现了错误。
3、还有其他更好的方法吗?
 
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject;
AData: TStream;
ABinding: TIdSocketHandle);
var
codestr:string;
//restore the message you receive
begin
setlength(codestr,adata.size);
adata.Read(codestr[1],adata.Size);
//read message
if codestr[0]='$00' then
showmessage('OK');
end;
 
感谢 书痕 的答复,
codestr[0]不是数组啊。codestr[0]为长度。
我们有一设备需要
RxData[0] 一直到 RxData[9] 需要将他们没一个都做作出一定的修改,然后在发回去。
 
学下提问的智慧吧 虽然没说出什么错 但估计我还是看出来了。我改后的代码(只加了三字符,希望LZ不要看不出来)
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject;
AData: TStream;
ABinding: TIdSocketHandle);
Var
RxData:array of byte;
begin
AData.Seek(0,0);
SetLength(RxData,AData.size);
AData.Read(RxData[0],AData.size);
if RxData[0]=$00 then
Showmessage('OK');
end;
 
啊,不错,是应该用RxData[0]的,应该就是这么解决了吧。
 
再次感谢 地质灾害 和书痕的热心帮助。
出错并不是因为 RxDATA 和 RxData[0] 是系统出错,有空我截上来。
AData.Read(RxData[0],AData.size);
我其实是想让 Adata 这个数据流变成一个组。这样才好判断。。
对Adata 的流不太好分析。。。。
 
是否可以用strpas(pchar(RxData))来把读入到RxData中的AData转换成字符串。如果不用strpas函数的话就变成一个字符数组。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
630
import
I
I
回复
0
查看
551
import
I
后退
顶部