急vc++ socket如何一次传数据库里查询的多条记录

急!vc++ socket怎么一次传数据库里查询的多条记录
最近在做一个网络版的进销存,采用的是c/s模式,winsock,MySql数据。在这过程中,客户端经常要访问服务器获取大量数据,比如我查询库存信息,客户端向服务器发送指令,服务器接收指令查询数据库,然后在把查询出来的记录发送到客户端。这个传多条记录的问题困扰了我好久,关于这个传输的问题我设计了两种模式,但是效果都不怎么满意:

第一种:采用结构体封装数据,由于不知道怎么一次发送这些查询出来的记录,所以在mysql中查询出一个记录集后一条一条的发送,每次发送一条数据的时候先发一个消息头(结构体,其中的参数用于告诉客户端干什么)给客户端,然后在发数据结构体。也就是说服务器没发送一条记录,其实是发了两个结构体。服务端和客户端都用了一个死循环来接收,每接收一次sleep(20),如果数据量大的时候,界面列表加载都要一定的时间,比如我查询了1000条数据,那么在要20秒的时间才能把数据显示完全,显然这种做法不可取。

第二种:发送XML型的字符串,下了一个tinyxml开源的解析器,查询的时候在服务器端拼凑一个XML型的字符串,如:
<MESSAGE>
<HEAD type="1" hasbody="1"/>
<BODY>
<item id="001" name="XX01" note="XX01"/>
<item id="001" name="XX02" note="XX02"/>
</BODY>
</MESSAGE>
但是在客户端解析的时候数据不是很正确,比如我取name的值,结果却是XX01"=note,检查了好久都没找到原因,在网上查询一下相关资料,说是这个tinyxml对中文解析还存在问题,说是要用UTF-8的中文,我又在XML加一些特殊符号,比如&abcd@#&am&等,果然显示不正确,要么显示没了,要么显示不正确。又去找了一下转码资料,后来发现转来转去太麻烦了,而且效率不高。

现在是两种方法都有问题,不知道怎么搞了。。。。

有没有其它的办法或者是改进的办法。。。。

小弟新手,求高人指点。。。。

------解决方案--------------------
其实用第一种方法你可以一个头带多个体,因为发送的是一个缓冲区,只要处理好头和各个体之间的位置偏移就可以实现,度的时候可以根据头判断有多少个体存在,然后读取。
省去xml解析的步骤。
------解决方案--------------------
直接发送结构体不可取
XML解析确实麻烦点
我一般是使用JSON格式,解析也方便
------解决方案--------------------
这个的确麻烦,实践出真知。