我定义一个类:
type
ttt:=record
s1:integer;
s2:byte;
s3:string[10];
s4:string[20];
a1:double;
a2:double;
定义一个子类
SSS:ttt;
sss.s1:=12;
sss.s2:=7;
sss.s3:='123456';
sss.s4:='987654321'; sss.a1:=100;
sss.a2:=200;
comm1.WriteCommData(pchar(@sss),n);请问 我的发送的字符串的长度 n 该定义为多少啊 ,,,?
type
ttt:=record
s1:integer;
s2:byte;
s3:string[10];
s4:string[20];
a1:double;
a2:double;
定义一个子类
SSS:ttt;
sss.s1:=12;
sss.s2:=7;
sss.s3:='123456';
sss.s4:='987654321'; sss.a1:=100;
sss.a2:=200;
comm1.WriteCommData(pchar(@sss),n);请问 我的发送的字符串的长度 n 该定义为多少啊 ,,,?
UserInfo = record
IP: array[0..9] of char;
AGE: array[0..149] of char;
Port: integer;
cast1: array[0..49] of char;
cast2: array[0..49] of char;
cast3: array[0..49] of char;
cast4: array[0..49] of char;
end;
tstas = record
resulttype: byte;
result: byte;
resultlength: array[0..3] of byte;
end;var
Test: tstas;
bbb: UserInfo;
DataLength, TmpLength, cc: integer;
vyte: byte;
tmparray1: array[0..370] of byte;
GGG: TAnalysisPackThread;
begin
try
DataLength := Socket.ReceiveBuf(Pointer(nil)^, -1);
if DataLength > 0 then Memo1.Clear;
while DataLength > 0 do
begin
FillChar(tmparray1, 370, #0);
FillChar(HeadArray, 6, #0);
if Socket.ReceiveBuf(HeadArray, 6) <= 0 then // <= 0 then
Break;
StrMove(@test, @HeadArray, 6);
Move(HeadArray, tmparray1, 6);
Memo1.Lines.Add(inttostr(Test.resulttype));
Memo1.Lines.Add(inttostr(Test.result));
TmpLength := integer(test.resultlength);
Memo1.Lines.Add(inttostr(TmpLength));
FillChar(TmpArray, 8192, #0);
TmpLength := Socket.ReceiveBuf(TmpArray, TmpLength + 1);
if TmpLength <= 0 then
Break;
StrMove(@bbb, @TmpArray, TmpLength);
Move(TmpArray, tmparray1[6], TmpLength);
vyte := Crc_8n(tmparray1, TmpLength + 5);
if vyte = tmparray1[TmpLength + 5] then rightcount := rightcount + 1
else errorcount := errorcount + 1;
Memo1.Lines.Add(bbb.IP);
Memo1.Lines.Add(bbb.AGE);
Memo1.Lines.Add(IntToStr(bbb.Port));
Memo1.Lines.Add(bbb.cast1);
Memo1.Lines.Add(bbb.cast2);
Memo1.Lines.Add(bbb.cast3);
Memo1.Lines.Add(bbb.cast4);
DataLength := DataLength - TmpLength - 6;
Memo1.Lines.Add('==================================================');
Memo1.Lines.Add('==================' + inttostr(i) + '==========================');
Memo1.Lines.Add('==================================================');
inc(i);
end;
except
end;
end;
这是谁在瞎说?网络通讯发送结构体本来就可以,串口发送结构体可不是那么简单!
本人历尽辛苦终于实现,是将结构写入文件,再将文件写入char数组中分块传出,虽然实现,但方法觉得不好。
而你提供的方法根本没法用嘛!我还以为遇到一位比我水平高的串口高手,唉!
说得对哈 ,,,我刚 学 delphi 以前是C delphi 基础都没打好,,就要用它进行系统开发,,,我也难啊 ,,,没时间补基础得。
我能用串口一次发送一个记录类 型的数据,,接收到的数据转换为16进制也能够现实在memo控件里,,,,但不知道 应该怎么解析这数据啊。。
用COMM1.Writecommdate(str:pchar;n:word) 可以直接发送字符串 发送结构体也可以
StrMove(@bbb, @TmpArray, TmpLength);
就解析回来了啊
他的程序是按照定义的结构体去解析 SOCKET 收到的数据用 COMM1.Writecommdate(str:pchar;n:word) 可以直接发送字符串 发送结构体也可以,,,,但我发送结构体的时候不知道该如何解析收到的数据,,,
bbb就是你的结构体,TmpArray是你接收的数组TmpLength 是结构体长度
我发送成功 解析也成功了 QQ:568236306
你可以试试,,用SPCOMM控件