专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »C语言教程 » socket怎么实现:Socket模拟SOAP消息实现代码 »正文

socket怎么实现:Socket模拟SOAP消息实现代码

来源: 发布时间:星期四, 2009年2月12日 浏览:133次 评论:0


    个图书管理系统是用 3层结构实现客户端服务器处理端和数据端客户端提出请求服务器端响应同时将从数据服务器得来结果以SOAP消息发送回客户端客户端解析SOAP消息将结果显示给用户

   实现思路方法:
   好了话不多说现在开始进入正题:
   在接到客户端发来请求后我用ADO连接数据服务器并查询(我用是Access)得到结果集Record以后将结果集中有关图书信息格式化成XML文档将其以SOAP消息形式发送回客户端 
//************************封装成SOAP消息发送回客户端************************// 
    MaxRows=0;//用来获得总行数
   while(!pRs->EndOfFile)
   {
    MaxRows;
    pRs->MoveNext;
   }
   pRs->MoveFirst;//这是必须现在记录已是最后行了
   
    nFields;
   nFields=pRs->Fields->GetCount; //得到字段总数
   
   CMarkup xml;
   xml.SetDoc(\"<?xml version=\\\"1.0\\\" encoding=\\\"GB2312\\\"?>\\r\\n\");
   xml.AddElem( \"RESULT\" );
   for( j=0;j<MaxRows;j)
   {
    xml.AddChildElem( \"BOOK\" );
    xml.IntoElem;
    for( k=0;k<nFields;k)  //获取字段名
    {
     _bstr_t name=pRs->Fields->GetItem((long)k)->GetName;
     _bstr_t value=pRs->Fields->GetItem((long)k)->GetValue;
     xml.AddChildElem((char *)name,(char *)value);
    }
    xml.OutOfElem;
    pRs->MoveNext;
   }
   xml.Save(\"Temp.xml\");
   //MessageBox(\"xml文件生成成功\");

   CFile file;
   file.Open(\"Temp.xml\",CFile::modeRead | CFile::typeBinary);
    buf[64*1024];
   mem(buf,0,64*1024);
   file.ReadHuge(buf,file.GetLength);

   //用发送
   send(m_sockClient[i],(char *)buf,file.GetLength+1,0); 
   file.Close;

  在这里我要介绍说明在解析XML文件时候我借用了CMarkup类十分感谢它作者他们努力使得我们在解析XML文件时候可以轻而已举这里再次感谢他们!也推荐大家在解析XML文件时候不妨试试这个类,非常好用!

上面代码还比较好懂我也就不多解释什么了(高手们可别笑话我哦~~) 
在接受到服务器端SOAP消息后客户端就可以解析SOAP消息并把结果显示出来了:  [Page]
 CFile file;
 file.Open(\"Temp.xml\",CFile::modeCreate | CFile::typeBinary | CFile::modeWrite );
 file.WriteHuge(recvBuf,strlen(recvBuf));
 file.Flush;
 file.Close;
 CMarkup xml;
 (!xml.Load(\"Temp.xml\"))
 {
  MessageBox(\"加载XML文件失败!\");
   ;
 }

 ...
 
  item=0;
 xml.ReMainPos; //make sure to move the po to the begin
 while (xml.FindChildElem(\"BOOK\"))
 {
   subItem=0;
  xml.IntoElem; //o BOOK
  m_listCtrl.InsertItem(item,\"\",0); //插入
  CString index;
  index.Format(\"%d\",item+1); //每行序号
  m_listCtrl.SetItemText(item,subItem,index);
  while(xml.FindChildElem) //循环得到节点值,也就是书各个信息
  {
   xml.IntoElem;
   CString value=xml.GetData; //得到值
   //MessageBox(value);
   m_listCtrl.SetItemText(item,subItem+1,value);
   subItem;
   xml.OutOfElem;
  }
  item;
  xml.OutOfElem; //out BOOK
 }

这就是格式化SOAP消息和解析SOAP消息主要部分
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: