这就是我对它的理解:
.x文件定义了服务器和客户端共享的接口和参数。当用rpcgen编译它时,它会生成.h,_xdr.c,_clnt.c和_svc.c。 _clnt.c是stub,_svc.c是skelleton,对吧?
我明白他们介于2之间的沟通,但是如何呢?此外,我看到运行的示例有你指定要连接的机器的IP地址(在示例中它使用相同的,127.0.0.1),但是您没有指定端口。它有保留端口吗?
答案 0 :(得分:5)
该程序有两个步骤。端口映射器在端口111上运行,RPC服务通过此服务进行注册并被此服务发现,但本身可以在任意端口上运行。
有关详细信息,请参阅RFC 1833 - Binding Protocols for ONC RPC Version 2。
答案 1 :(得分:1)
在RPC服务器计算机上,有一个运行的进程称为终结点映射程序(这特别适用于ONC RPC,但其他RPC机制将类似)。此过程在已知的端口上运行,因此任何人都可以连接到它(安全性和存在允许,当然)。
RPC服务器将启动并向端点映射器注册自己,提供其代码(例如,MULT)和端口号,端点映射器将尽职地存储该信息以供以后使用:
+---------+ +--------+
| Mapper, | <- Register MULT, port Y -- | Server |
| known | | for |
| port X | | MULT |
+---------+ +--------+
当客户端随后使用IP地址连接到端点映射器时,它会提供所需的代码(MULT),然后端点映射器提供最终目标 - 现在客户端知道IP地址MULT服务的和端口:
+--------+ +---------+
| Client | -- Request MULT -> | Mapper, |
| | <- Return port Y -- | known |
| | | port X |
+--------+ +---------+
此时,端点映射器可以逐步退出并让客户端直接使用MULT服务本身打开会话。
+--------+ +--------+
| Client | -- Connect to MULT -> | Server |
| | <- Do stuff -> | for |
| | | MULT |
+--------+ +--------+