R
ranyang
Unregistered / Unconfirmed
GUEST, unregistred user!
本人在客户端有一个Tclientsocket控件,专门接收Tserversocket发出的信息,采用的是发出Xml格式的文档,形如:
<?xml version="1.0" encoding="GBK"?>
<RES>
<TYPE>2</TYPE>
...
</RES>
当接收后,clientsocket解析,在理想情况下:
用下方法解:
DWStr:=Socket.ReceiveText;
XMLRead.Active := False;
XMLRead.XML.Text := DWstr;
XMLRead.Active := True;
Root:= XMLRead.DocumentElement;
if Root.ChildNodes['TYPE'].Text='2' then
。。。。
在理想情况下,来一条就解析一条,基本没有问题!但是现在发生一个问题:
来的数据往往不是完整的一条或有很多条:
<?xml version="1.0" encoding="GBK"?>
<RES><TYPE>2</TYPE><TERMINAL_ID>A57018</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>A57018</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>30.556153</LATITUDE><LONGITUDE>114.277576</LONGITUDE><VELOCITY>33.336</VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>
<?xml version="1.0" encoding="GBK"?>
<RES><TYPE>2</TYPE><TERMINAL_ID>FB0287</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>FB0287</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>32.258915</LATITUDE><LONGITUDE>111.455278</LONGITUDE><VELOCITY>24.076</VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>
或:
<?xml version="1.0" encoding="GBK"?>
<RES><TYPE>2</TYPE><TERMINAL_ID>A57018</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>A57018</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>30.556153</LATITUDE><LONGITUDE>114.277576</LONGITUDE><VELOCITY>33.336
等一下才会有下半段:
</VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>
等等情况。所以造成解析错误抱错!
有什么好的办法吗?!要求数据量大,而且相应时间要快!因为每秒钟都有大量数据发回来!!!
大家都想想呀!!!!
<?xml version="1.0" encoding="GBK"?>
<RES>
<TYPE>2</TYPE>
...
</RES>
当接收后,clientsocket解析,在理想情况下:
用下方法解:
DWStr:=Socket.ReceiveText;
XMLRead.Active := False;
XMLRead.XML.Text := DWstr;
XMLRead.Active := True;
Root:= XMLRead.DocumentElement;
if Root.ChildNodes['TYPE'].Text='2' then
。。。。
在理想情况下,来一条就解析一条,基本没有问题!但是现在发生一个问题:
来的数据往往不是完整的一条或有很多条:
<?xml version="1.0" encoding="GBK"?>
<RES><TYPE>2</TYPE><TERMINAL_ID>A57018</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>A57018</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>30.556153</LATITUDE><LONGITUDE>114.277576</LONGITUDE><VELOCITY>33.336</VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>
<?xml version="1.0" encoding="GBK"?>
<RES><TYPE>2</TYPE><TERMINAL_ID>FB0287</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>FB0287</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>32.258915</LATITUDE><LONGITUDE>111.455278</LONGITUDE><VELOCITY>24.076</VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>
或:
<?xml version="1.0" encoding="GBK"?>
<RES><TYPE>2</TYPE><TERMINAL_ID>A57018</TERMINAL_ID><TERMINAL_TYPE>TDW</TERMINAL_TYPE><UIM_ID>A57018</UIM_ID><GSN></GSN><START_TIME></START_TIME><RETURN_TIME>2006-06-29 10:41:45</RETURN_TIME><LATITUDE>30.556153</LATITUDE><LONGITUDE>114.277576</LONGITUDE><VELOCITY>33.336
等一下才会有下半段:
</VELOCITY><ALTITUDE>50</ALTITUDE><RADIUS>0</RADIUS><DIRECTION>29</DIRECTION></RES>
等等情况。所以造成解析错误抱错!
有什么好的办法吗?!要求数据量大,而且相应时间要快!因为每秒钟都有大量数据发回来!!!
大家都想想呀!!!!