- 论坛徽章:
- 0
|
求以xml格式socket封包的例子!
楼主该是用xml格式通过socket做接口吧。我们以前做过这么一个银行接口。不
过xml库是我们自己开发的。类库里下面的2个函数就是为了解决这个问题的。
pack = xml.SaveToStream(&packlen);
mXml.LoadFromStream(pool);
例子:
- int TTWitNet::SendErrPack(int socketid)
- {
- char *pack,tmpbuf[10];
- int packlen;
-
- TXml xml;
- TXmlNode *node,*sonnode;
-
- printf("error pack:the responce serial is %d ...\n",socketid);
-
- //下面创建主节点(inesmsg)
- //创建一个组节点
- node=xml.Create_Node(Xml_Node_Type_Group);
-
- //设置名称
- node->;Set_Name("inesmsg");
- //设置属性(作为第一层结点)
- xml.Add_Node(node);
-
- //inesmsg节点下挂上 msghead 节点
- //创建一个组节点
- //sonnode=xml.Create_Group("msghead");
- //作为第二层结点
- //node->;Add_Node(sonnode);
-
- //取源包头信息
- sonnode=mXml.Get_Node("inesmsg,msghead");
- //加入当前包头
- xml.Add_Node("inesmsg",sonnode);
- //创建一个组节点
- sonnode=xml.Create_Group("msgcontent");
- //作为第二层结点
- node->;Add_Node(sonnode);
- //创建msgcontent信息
- node=xml.Create_Node(Xml_Node_Type_Element);
- node->;Set_Name("actcode1");
- node->;Set_Value(mWitNetPack.ActCode1);
- xml.Add_Node("inesmsg,msgcontent",node);
- node=xml.Create_Node(Xml_Node_Type_Element);
- node->;Set_Name("actcode2");
- node->;Set_Value(mWitNetPack.ActCode2);
- xml.Add_Node("inesmsg,msgcontent",node);
- node=xml.Create_Node(Xml_Node_Type_Element);
- node->;Set_Name("actcode3");
- node->;Set_Value(mWitNetPack.ActCode3);
- xml.Add_Node("inesmsg,msgcontent",node);
- //返回错误代码
- sprintf(tmpbuf,"%02d",mErrFlag);
- tmpbuf[2]=0;
-
- node=xml.Create_Node(Xml_Node_Type_Element);
- node->;Set_Name("retn");
- node->;Set_Value(tmpbuf);
- xml.Add_Node("inesmsg,msgcontent",node);
- //返回错误信息
- node=xml.Create_Node(Xml_Node_Type_Element);
- node->;Set_Name("desc");
- node->;Set_Value(mErrMsg);
- xml.Add_Node("inesmsg,msgcontent",node);
- node = xml.Get_Node("inesmsg,msghead,msgtype");
- if (node==NULL)
- {
- printf("cant get msgnumber\n");
- return 0;
- }
- node->;Set_Value("resultlast");
- //保存到文件中
- //xml.SaveToFile("witnet.xml");
-
- pack = xml.SaveToStream(&packlen);
-
- if (socketid!=0)
- send(socketid,pack,packlen,0);
- else
- WriteLog(pack);
- WriteLog(pack);
-
- free(pack);
-
- return 1;
- }
复制代码 |
|