xmlrpc++提供了一个很好的架构,服务器端方法只需要继承XmlRpcServerMethod,然后实现方法execute,就可以在服务器端新增方法(客户便可以在服务器端执行这个方法了)。非常的简单且方便。但其也有一个最大的问题,就是屏蔽了太多的细节。如果不修改这个库,你无法从外面获得更详细的信息,比如,当前已连接的客户数量,当前连接客户的信息,当前是哪个客户在请求方法等。当你需要这些信息时,便感到有些束手无策。
没有办法,只有修改库了。
需求:
在服务器端执行某方法时,需要知道,当前请求执行该方法的客户端socket信息。
修改部分如下:
1 新增类:SocketInfo,包含IP与端口,没有用系统提供的sockaddr_in
2 类XmlRpcSource 中新增SocketInfo属性,意味通讯对等端的socket信息
3 类XmlRpcServerMethod 中新增SocketInfo属性,保存当前执行该方法的客户端信息
4 方法:int XmlRpcSocket::accept(int fd),新增返回参数,返回客户socket信息SocketInfo
在 (int) ::accept(fd, (struct sockaddr*)&addr, &addrlen); 执行完毕后,将信息从addr中取出,并通过accept返回
5 方法:void XmlRpcServer::acceptConnection()
执行int s = XmlRpcSocket::accept(this->getfd())替换为修改后的accept,将SocketInfo取出
_disp.addSource之前,将该SocketInfo添加到新建的XmlRpcServerConnection*中
6 方法:bool XmlRpcServerConnection::executeMethod(const std::string& methodName,
XmlRpcValue& params, XmlRpcValue& result) 在真正执行方法(也就是method->execute(params, result))之前,将类XmlRpcServerConnection对应的客户端信息SocketInfo设置到需要执行的方法method的SocketInfo中。
OK. 每次在服务器端执行方法的时候,都可以获取请求该方法的客户端IP与端口信息。
分享到:
相关推荐
xmlrpc++0.7源代码,带VC工程文件,方便对xml进行编码和解码。如: <member> <name>result</name> <value><i4>0</i4></value> <member> <name>desc</name> <value>Success</value> <member> <name>group...
xmlrpc++0.7.zip这个压缩包包含了XML-RPC协议在C++语言中的实现代码和测试例子,是开发者学习和使用XML-RPC的一个实用资源。 首先,我们要理解XML-RPC的基本概念。XML-RPC使用XML作为数据交换格式,通过HTTP协议...
XmlRpc+Spring+Hibernate系统是一种基于Java的分布式应用程序开发架构,它将三种强大的技术整合在一起,以实现高效、灵活和可扩展的后端服务。在这个系统中,XML-RPC(远程过程调用)用于跨网络通信,Spring框架提供...
5. **项目文件**:压缩包中的xmlrpc.dsp和xmlrpc.dsw是Microsoft Visual Studio的项目文件,用于管理和编译XMLRPC++源代码。这些文件在Windows环境中非常有用,使得开发者可以利用IDE来调试和构建库。 6. **源代码*...
在Java环境中,XMLRPC库是一个常用的选择,可以方便地实现客户端和服务端的通信。 本教程主要围绕以下几个知识点展开: 1. **XMLRPC的基本概念**: - XMLRPC的核心思想是通过XML来封装参数和返回值,然后通过HTTP...
综合上述信息,我们可以了解到这个资源是一个用于Java平台的XMLRPC库,提供了源代码和预编译的二进制文件,适用于开发分布式系统中的远程过程调用功能。开发者可以通过源代码了解其实现原理,也可以直接使用JAR文件...
基于Chris Morley出色的著作“ XmlRpc ++”派生的XmlRpc库。 / *由ise GmbH 2013更改* /-添加了多线程支持-添加了对Windows编译的支持-扩展类XmlRpcValue用于某些定义的输入格式的自动类型识别-添加了二进制协议以...
The automatic base64 encoding can be turned on via the new XML_RPC_Client::setAutoBase64() method. The auto-encoding is a workaround for systems that don't have PHP's mbstring extension ...
这个结构体包含了出错标志、出错代码以及出错信息等字段,用于在程序运行过程中捕捉和记录错误信息。 - **内存管理**:考虑到嵌入式系统的资源限制,本文采取了动态内存分配的方式来管理内存资源。具体而言,使用...
在Python中,可以使用xmlrpc库,如`SimpleXMLRPCServer`来快速创建一个XMLRPC服务器。 客户端则负责构造XML请求,发送到服务器,并接收服务器返回的XML响应。客户端通常需要知道服务器的地址、调用的函数名以及要...
3. **软件集成**:在多软件协同工作的场景下,XMLRPC可作为不同软件间交互的桥梁,例如,一个项目管理工具通过XMLRPC调用版本控制系统获取代码变更信息。 4. **API接口**:提供公开的API接口时,开发者可以选择...
在Python中,XMLRPC提供了一种轻量级的跨平台解决方案,用于实现服务器和客户端之间的交互。 在给定的文件列表中,我们可以看到以下三个关键文件: 1. server.py:这是一个XMLRPC服务器的实现。Python的`xmlrpc....
XMLRPC(XML Remote Procedure Call)是一种基于HTTP协议的远程调用技术,它允许客户端通过发送XML格式的数据到服务器,执行服务器上的方法,...通过深入理解和使用这个库,你可以轻松地在Golang项目中集成XMLRPC功能。
Java XMLRPC框架是一个用于在Java应用程序之间实现远程过程调用(RPC)的工具,它基于XML数据格式进行通信。XMLRPC允许程序通过HTTP协议发送请求并接收响应,从而实现跨平台、跨语言的分布式计算。这个框架使得...
在这个"Ub.XMLRPC.rar_xmlrpc"压缩包中,我们很可能是找到了一个C#实现的XMLRPC接口开发示例,用于web开发,目的是与其他接口进行对接。 XMLRPC的核心概念包括以下几个方面: 1. **客户端**:客户端是发起RPC调用...
请求体中包含了方法名和参数,而响应则包含了调用结果或错误信息。在PHP中,我们可以使用内置的`xmlrpc`扩展来创建和解析这些消息。而在C++中,可能需要第三方库如`libxmlrpc`来实现相同的功能。 接下来,让我们...
- **许可证**: 本软件遵循宽松的许可证条款,允许用户在保留版权信息的前提下自由地使用、复制、修改和分发源代码或二进制形式的软件。 - **更新历史**: - **2.2.2版**: 更新了一些已知问题并优化了部分功能。 - *...
`src`目录包含了库的核心实现,`include`包含头文件供用户在项目中引用,`examples`则提供了使用库的示例代码。 - **编译和测试**:按照README或INSTALL文件的指示编译源码,并运行测试用例以确保库在你的系统上...
在Python中,`xmlrpc`库提供了对XMLRPC的支持,包括客户端和服务器端的实现。在这个描述中提到的是`xmlrpc`库的一个特定版本——3.1。 在Python的`xmlrpc`库中,主要有两个模块:`xmlrpc.client`和`xmlrpc.server`...