曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
此外,它还要存放当前用户的订单信息,所以它或许可以称为一种会话结构:
程序清单1 8 - 4 7
这是套接字结构链接列表的开始:
下面是几个函数原型(实际上,这个特定机器上的编译器不支持成熟的函数原型):
程序清单1 8 - 4 8
第18章实例研究4—SOAP使用797 下载
以下是主程序:
程序清单1 8 - 4 9
我们首先创建套接字,将它绑定到端口8 0,并监听进入的调用。注意,函数h t o n s ( )用于保
证L i n u x有适当格式的端口号:
程序清单1 8 - 5 0
798使用XML 高级编程
下载
现在,我们准备最重要的s e l e c t调用。我们寻找主套接字以及与客户相连的套接字上的读通
知。主套接字上的读通知相当于进入调用信号。
程序清单1 8 - 5 1
现在,检查进入的调用。如果有调用,接受它,并创建新的S O C K E T结构,并使用辅助函
数a d d S o c k e t将它添加到链接列表中:
程序清单1 8 - 5 2
现在,我们检查链接列表中的每个客户套接字的读通知:
程序清单1 8 - 5 3
第18章实例研究4—SOAP使用799 下载
如果不存在读通知,即便设置了读信号,套接字也将被关闭,或者产生错误,因此我们将
删除套接字结构。否则,我们处理请求:
程序清单1 8 - 5 4
以上就是m a i n ( )函数。以下是处理链接列表所需的几个辅助函数:
程序清单1 8 - 5 5
800使用XML 高级编程
下载
现在来看S c u m S e r v e r。如果你看过C O p e r a C l i e n t S o c k e t的代码,可能觉得以下代码有些眼熟。
实际上,它们几乎完全一致:
程序清单1 8 - 5 6
第18章实例研究4—SOAP使用801 下载
然而,处理X M L内容的函数要略微复杂一些,因为我们无法依靠任何XML DOM。我们不
得不自己解析X M L。事实上,情况没有你想象的那么糟,因为我们使用的是X M L的一个很小的
子集,而且我们不处理非常复杂的S O A P消息结构。
程序清单1 8 - 5 7
802使用XML 高级编程
下载
以上代码都与C O p e r a C l i e n t S o c k e t : : P r o c e s s C o n t e n t非常类似。然而,从此开始就要体现出两
者的区别,因为O p e r a S e r v e r要开始处理XML DOM:
如果通过O P E R A调用的方法恰好是S u b m i t ( ),我们不需要进行更多的解析操作:
程序清单1 8 - 5 8
然而,如果调用了某个p u t _方法,就需要提取参数值。我们将使用s t r t o k ( )提取X M L的各种
元素。我们将处于以下两种状态之一:等待标记(“< a rg u m e n t >”),以及等待参数本身。标志
b A rg u m e n t用于确定到底属于哪种状态:
程序清单1 8 - 5 9
如果是标记,需要提取参数本身,假设它不是空值:
程序清单1 8 - 6 0
第18章实例研究4—SOAP使用803 下载
现在,已经得到了参数值, p Va l u e指向该值。所以,继续调用请求的p u t _方法:
程序清单1 8 - 6 1
如果我们仍然等待标记,检查是否获得了标记:
程序清单1 8 - 6 2
现在,我们继续X M L中的下一个元素:
程序清单1 8 - 6 3
这还不错,是吗?从现在开始,我们又回到熟悉的代码。这与C O p e r a C l i e n t S o c k e t : :
P r o c e s s C o n t e n t中对等的代码非常类似:
程序清单1 8 - 6 4
804使用XML 高级编程
下载
以下是同样熟悉的辅助函数,它报告返回给发出调用的应用程序的错误情况:
程序清单1 8 - 6 5
现在,我们来看S i m p l e O r d e r的等价函数。以下例程用于建立订单中的字段:
程序清单1 8 - 6 6
第18章实例研究4—SOAP使用805 下载
806使用XML 高级编程
下载
以下例程用于提交订单(在本示例中,它仅包含将订单的详细内容写入文件):
程序清单1 8 - 6 7
最后是用于验证有效性的例程:
程序清单1 8 - 6 8
第18章实例研究4—SOAP使用807 下载
运行该程序后你会发现,仅从客户角度看,它与基于C O M的O p e r a S e r v e r并无差别。同样,
你需要保证没有其他程序占用端口8 0。这就是我们将在客户看到的内容:
程序清单1 8 - 6 9
808使用XML 高级编程
下载
以下是o r d e r. d a t文件的内容:
因此,不要被S O A P中的字母“O”误导。在大多数单词中,它意味着对象。但是我们在本
节中介绍的代码是用标准C编写的,它与对象没有任何瓜葛。
18.3 小结
S O A P是一种消息协议,它能够封装远程对象的方法调用。它是用X M L编写的,用H T T P作
为传输协议(虽然规范并不强制要求这一点,它仅仅定义了与H T T P的绑定)。这使得它非常容
易通过防火墙,特别是当它使用著名的端口8 0。将来它将分配自己的标准端口。
实际上, S O A P并不要求服务器采用面向对象的通信方式。它甚至不要求服务器将进入的
S O A P消息看作远程过程调用。它将处理的自由完全留给了服务器。
因此,S O A P到底有哪些优点?它利用目前广泛采纳的技术解决常见的问题—如何标准化
消息协议。既然已经建立了S O A P,各种类型的实现应用程序将迅速涌现,届时我们将能够实现
大家在信息传递方面的各种需求。
第18章实例研究4—SOAP使用809 下载
下载
附录A XML 1.0规范
本附录选自1 9 9 8年2月1 0日发布的W 3 C建议,可以从以下地址获得完整的文档:
h t t p : / / w w w. w 3 . o rg / T R / R E C - x m l
版权信息(c) 1995-1998 WWW协会,(Massachusetts Institute of Te c h n o l o g y,I n s t i t u t
National de Recherche en Informatique et en Automatique,Keio University)。版权所有。
h t t p : / / w w w. w 3 . o rg / C o n s o r t i u m / L e g a l /。
本附录已参照1 9 9 9年2 月1 7日发布的勘误表进行修正,可以从以下地址获得勘误表:
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程下(79)