Heim > Datenbank > MySQL-Tutorial > Socket模拟SOAP消息

Socket模拟SOAP消息

WBOY
Freigeben: 2016-06-07 15:16:16
Original
1180 Leute haben es durchsucht

问题的提出: 我做了一个图书管理系统,是用三层结构实现的,客户端,服务器处理端和数据端。客户端提出请求,服务器端响应,同时将从数据服务器得来的结果以SOAP 消息 发送回客户端,客户端解析SOAP 消息 ,将结果显示给用户。 实现方法: 好了,话不多说,

问题的提出:

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

实现方法:

好了,话不多说,现在开始进入正题:

在接到客户端发来的请求后,我用ADO连接数据服务器并查询(我用的是Access),得到结果集Recordset以后,将结果集中有关图书信息格式化成XML文档,将其以SOAP消息形式发送回客户端

//************************封装成SOAP<strong>消息</strong>发送回客户端************************//  <br>      int MaxRows=0;//用来获得总的行数<br>      while(!pRs->EndOfFile)<br>      {<br>        MaxRows++;<br>        pRs->MoveNext();<br>      }<br>      pRs->MoveFirst();//这是必须的,现在记录已是最后一行了<br>      <br>      int nFields;<br>      nFields=pRs->Fields->GetCount(); //得到字段总数<br>      <br>      CMarkup xml;<br>      xml.SetDoc("<?xml version="1.0" encoding="GB2312"?><br>");<br>      xml.AddElem( "RESULT" );<br>      for(int j=0;j<maxrows></maxrows>      {<br>        xml.AddChildElem( "BOOK" );<br>        xml.IntoElem();<br>        for(int k=0;k<nfields></nfields>        {<br>          _bstr_t name=pRs->Fields->GetItem((long)k)->GetName();<br>          _bstr_t value=pRs->Fields->GetItem((long)k)->GetValue();<br>          xml.AddChildElem((char *)name,(char *)value);<br>        }<br>        xml.OutOfElem();<br>        pRs->MoveNext();<br>      }<br>      xml.Save("Temp.xml");<br>      //MessageBox("xml文件生成成功");<br>      CFile file;<br>      file.Open("Temp.xml",CFile::modeRead | CFile::typeBinary);<br>      byte buf[64*1024];<br>      memset(buf,0,64*1024);<br>      file.ReadHuge(buf,file.GetLength());<br>      //用socket发送<br>      send(m_sockClient[i],(char *)buf,file.GetLength()+1,0);<br>      file.Close();  在这里我要说明一下,在解析XML文件的时候,我借用了CMarkup类,十分感谢它的作者,因为他们的努力使得我们在解析XML文件的时候可以轻而已举,这里再一次感谢他们!也推荐大家在解析XML文件的时候不妨试试这个类,非常的好用!

上面的代码还比较好懂,我也就不多解释什么了(高手们可别笑话我哦~~)

在接受到服务器端的SOAP消息后,客户端就可以解析SOAP消息并把结果显示出来了:

  CFile file;<br>  file.Open("Temp.xml",CFile::modeCreate | CFile::typeBinary | CFile::modeWrite );<br>  file.WriteHuge(recvBuf,strlen(recvBuf));<br>  file.Flush();<br>  file.Close();<br>  CMarkup xml;<br>  if(!xml.Load("Temp.xml"))<br>  {<br>    MessageBox("加载XML文件失败!");<br>    return ;<br>  }<br>  ...<br>  <br>  int item=0;<br>  xml.ResetMainPos(); //make sure to move the point to the begin<br>  while (xml.FindChildElem("BOOK"))<br>  {<br>    int subItem=0;<br>    xml.IntoElem(); //into BOOK<br>    m_listCtrl.InsertItem(item,"",0); //插入一行<br>    CString index;<br>    index.Format("%d",item+1); //每行的序号<br>    m_listCtrl.SetItemText(item,subItem,index);<br>    while(xml.FindChildElem()) //循环得到节点值,也就是书的各个信息<br>    {<br>      xml.IntoElem();<br>      CString value=xml.GetData(); //得到值<br>      //MessageBox(value);<br>      m_listCtrl.SetItemText(item,subItem+1,value);<br>      subItem++;<br>      xml.OutOfElem();<br>    }<br>    item++;<br>    xml.OutOfElem(); //out BOOK<br>  }好了,这就是格式化SOAP消息和解析SOAP消息主要的部分,这是本人的一点心得,愿与大家一起分享,有不对之处还请大家多多指教。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage