T
tt8
Unregistered / Unconfirmed
GUEST, unregistred user!
Indy tcp 接收某银行数据
//文件数据发送请求包结构
FILE_REQ_BANK_STRUCT = record
dgtype: char; //'3'
dglength: array[1..5] of char; //所有域的总长度
sndstat: char; //'0'=last packed '1'=goto '2'=failure
databuf: array[1..BUFFER_SIZE] of char; //source
end;
-----------------------
...
repeat
...
client.ReadBuffer(file_req, sizeof(file_req));
...
client.WriteBuffer(file_resp, sizeof(file_resp), true);
...
until condition
开始接收,应答都很正常,但是最后一个包 接收时发生错误。
经排查,估计是该包内容长度和sizeof(file_req)不等的原因(请参看 问题2068301),
导致写入到 file_req 发生错误。
我该如何 解决该问题??? thanks.
(注:file_req 为我的一个包接收结构)
(请参看 问题2068301:如下:
FNAME_REQ_BANK_STRUCT = record
dgtype: char; //'1'
dglength: array[1..5] of char; //所有域的总长度 '00086'
sfile: array[1..80] of char; //要传送的文件名
end;
-----------------以上为定义
var
fname_req:FNAME_REQ_BANK_STRUCT;
...
fname_req.dgtype:='1';
//如果下句错,为什么这句没有错?
fname_req.dglength:='00086';
//这句提示错误:incompatible types 'Array' and 'String'
fname_req.sfile:='asdf';
为什么?
来自:finalrinoa, 时间:2003-7-29 15:26:00, ID:2068357
把dglength的类型改为String不就行了
来自:tt8, 时间:2003-7-29 15:28:00, ID:2068363 | 编辑
要和unix下c 通讯,只能用 array [1..80] of char 形式
来自:lichdr, 时间:2003-7-29 15:32:00, ID:2068376
兩者要一樣長。
你先判斷一下賦值字符串的長度,不夠長的話後面用空格補
来自:tt8, 时间:2003-7-29 15:35:00, ID:2068392 | 编辑
lichdr的方法好象可以
不过,那不是很累?
请给出具体方法。谢谢
来自:tt8, 时间:2003-7-29 15:37:00, ID:2068407 | 编辑
另外如果我收到返回包,
那么他会不会正确填好 某个 含 array[]of char 的struct?
来自:zxp_ping, 时间:2003-7-29 15:37:00, ID:2068408
strpcopy(fname_req.dglength:='000086');
来自:tt8, 时间:2003-7-29 15:38:00, ID:2068412 | 编辑
strpcopy(fname_req.sfile,'asdf');
没用的,我试过。
来自:lichdr, 时间:2003-7-29 15:58:00, ID:2068466
用format怎樣
a := 'asdf';
fname_req.sfile:=format('%80s',[a]);
来自:tt8, 时间:2003-7-29 16:09:00, ID:2068506 | 编辑
没有用
各位高手能不能 把上面的程序段拷到 实际程序中编译一下 谢谢。
来自:tt8, 时间:2003-7-29 16:11:00, ID:2068510 | 编辑
看起来很简单的问题,却折磨着我2个小时了!!!
帮帮我,谢谢。
最好是在实际程序中编译一下。
来自:pihome, 时间:2003-7-29 16:21:00, ID:2068551
strcopy(@fname_req.sfile,'asdf');
来自:tt8, 时间:2003-7-29 16:24:00, ID:2068566 | 编辑
通过,谢谢
)
//文件数据发送请求包结构
FILE_REQ_BANK_STRUCT = record
dgtype: char; //'3'
dglength: array[1..5] of char; //所有域的总长度
sndstat: char; //'0'=last packed '1'=goto '2'=failure
databuf: array[1..BUFFER_SIZE] of char; //source
end;
-----------------------
...
repeat
...
client.ReadBuffer(file_req, sizeof(file_req));
...
client.WriteBuffer(file_resp, sizeof(file_resp), true);
...
until condition
开始接收,应答都很正常,但是最后一个包 接收时发生错误。
经排查,估计是该包内容长度和sizeof(file_req)不等的原因(请参看 问题2068301),
导致写入到 file_req 发生错误。
我该如何 解决该问题??? thanks.
(注:file_req 为我的一个包接收结构)
(请参看 问题2068301:如下:
FNAME_REQ_BANK_STRUCT = record
dgtype: char; //'1'
dglength: array[1..5] of char; //所有域的总长度 '00086'
sfile: array[1..80] of char; //要传送的文件名
end;
-----------------以上为定义
var
fname_req:FNAME_REQ_BANK_STRUCT;
...
fname_req.dgtype:='1';
//如果下句错,为什么这句没有错?
fname_req.dglength:='00086';
//这句提示错误:incompatible types 'Array' and 'String'
fname_req.sfile:='asdf';
为什么?
来自:finalrinoa, 时间:2003-7-29 15:26:00, ID:2068357
把dglength的类型改为String不就行了
来自:tt8, 时间:2003-7-29 15:28:00, ID:2068363 | 编辑
要和unix下c 通讯,只能用 array [1..80] of char 形式
来自:lichdr, 时间:2003-7-29 15:32:00, ID:2068376
兩者要一樣長。
你先判斷一下賦值字符串的長度,不夠長的話後面用空格補
来自:tt8, 时间:2003-7-29 15:35:00, ID:2068392 | 编辑
lichdr的方法好象可以
不过,那不是很累?
请给出具体方法。谢谢
来自:tt8, 时间:2003-7-29 15:37:00, ID:2068407 | 编辑
另外如果我收到返回包,
那么他会不会正确填好 某个 含 array[]of char 的struct?
来自:zxp_ping, 时间:2003-7-29 15:37:00, ID:2068408
strpcopy(fname_req.dglength:='000086');
来自:tt8, 时间:2003-7-29 15:38:00, ID:2068412 | 编辑
strpcopy(fname_req.sfile,'asdf');
没用的,我试过。
来自:lichdr, 时间:2003-7-29 15:58:00, ID:2068466
用format怎樣
a := 'asdf';
fname_req.sfile:=format('%80s',[a]);
来自:tt8, 时间:2003-7-29 16:09:00, ID:2068506 | 编辑
没有用
各位高手能不能 把上面的程序段拷到 实际程序中编译一下 谢谢。
来自:tt8, 时间:2003-7-29 16:11:00, ID:2068510 | 编辑
看起来很简单的问题,却折磨着我2个小时了!!!
帮帮我,谢谢。
最好是在实际程序中编译一下。
来自:pihome, 时间:2003-7-29 16:21:00, ID:2068551
strcopy(@fname_req.sfile,'asdf');
来自:tt8, 时间:2003-7-29 16:24:00, ID:2068566 | 编辑
通过,谢谢
)