之前的帖子:
http://community.csdn.net/Expert/topic/4857/4857418.xml?temp=.3349878接上:
可以在UDPServerUDPRead事件中返回发送数据后的结果,
procedure TFrm_UDPServer.UDPServerUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s: String;
begin
DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
s := DataStringStream.DataString;
end;
但是,s里得到的是这样“@@@@?”的数据,
估计是16进制的缘故,
本来应该返回的是应该这样的:
40 40 40 40 01 fb 05 00 00 00 00 21 00 01 00 00 01
请问,如何可以把返回的结果转换成我需要的格式,
http://community.csdn.net/Expert/topic/4857/4857418.xml?temp=.3349878接上:
可以在UDPServerUDPRead事件中返回发送数据后的结果,
procedure TFrm_UDPServer.UDPServerUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s: String;
begin
DataStringStream := TStringStream.Create('');
try
DataStringStream.CopyFrom(AData, AData.Size);
s := DataStringStream.DataString;
end;
但是,s里得到的是这样“@@@@?”的数据,
估计是16进制的缘故,
本来应该返回的是应该这样的:
40 40 40 40 01 fb 05 00 00 00 00 21 00 01 00 00 01
请问,如何可以把返回的结果转换成我需要的格式,
S: String;
i, iAllRead, iRead: Integer;
Buf: array [0..1023] of Byte;
begin
iAllRead := 0;
S := '';
while iAllRead < AData.Size do
begin
iRead := AData.Read(Buf, SizeOf(Buf));
if iRead <= 0 then Break;
Inc(iAllRead, iRead);
for I := 0 to iRead -1 do
begin
S := S + Format('%.2X ', [Buf[I]]);
end;
end;
end;
另外,还想请教下:
现在的情况是这样的,
要连一个设备,这个设备支持LAN/RS485/RS232,三种连接方式(是不是要写三类同功能的函数来操作设备?),
在程序里如何设置才可以自动判断连接方式、并根据不同的连接方式判断函数,
可以指点下吗,
多谢了,
我所接触到的RS485都是转换成RS232的了根据优先级来判断,比如Lan的优先级比较高的话,先判断Lan是否能连接,如果不能连接再判断其他的连接是否可以连接,都不能连接的话,则提示用户连接方式不同当然要写不同的函数,但如果你设计得合理的话,不用所有的函数都分别区分3个的,仅把数据传输部分区分开就好了
可以通过转化头(Converter)来实现,共用函数,
但是LAN方式则必须用另外的函数,
是吗?