用于远程过程调用 unix 的端口和 ip

     2023-02-16     111

关键词:

【中文标题】用于远程过程调用 unix 的端口和 ip【英文标题】:port and ip for remote procedure call unix 【发布时间】:2014-01-09 16:24:50 【问题描述】:

我正在使用 RPC(远程过程调用)制作服务器-客户端程序。客户端向服务器发送三个数字,服务器计算数字的总和,如果它大于当前总和,则服务器将这三个数字发回给客户端。但我希望服务器发回客户端的端口和 IP,但我不知道该怎么做。有没有简单的方法来解决这个问题?

这是我的代码:

headerrpc.h

#include <rpc/rpc.h>
#include <rpc/xdr.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

#define PROGRAM_EXEC ((u_long)0x40000000)
#define VERSIUNE_EXEC ((u_long)1)
#define EXEC_ADD ((u_long)2)

typedef struct Data
  short a;
  short b;
  short c;
  u_short port;
Data;

int xdr_Data(XDR* xdr, Data* d)
  if(xdr_short(xdr,&(d->a)) == 0) return 0;
  if(xdr_short(xdr,&(d->b)) == 0) return 0;
  if(xdr_short(xdr,&(d->c)) == 0) return 0;
  if(xdr_short(xdr,&(d->port)) == 0) return 0;
  return 1;

服务器

#include "headerrpc.h"
#include <stdio.h>
#include <stdlib.h>

Data* data;

Data* add(Data* d)
  static int sum = -32000;
  //Data* data = (Data*)malloc(sizeof(Data));
  if((d->a + d->b + d->c) > sum)
  

    sum = d->a + d->b + d->c;
    data->a = d->a;
    data->b = d->b;
    data->c = d->c;
    data->port = data->port;
    printf("It was found a greater sum %d\n");
    return data;
  
  else
  
    printf("The sum of the given numbers is not greater than the current sum\n");
    return data;
  


main()
  data = (Data*)malloc(sizeof(Data));
  registerrpc(PROGRAM_EXEC, VERSIUNE_EXEC, EXEC_ADD, add, xdr_Data, xdr_Data);
  svc_run();

客户

#include "headerrpc.h"
#include <stdio.h>
#include <stdlib.h>

int main()
 
  Data d;
  Data* r = (Data*)malloc(sizeof(Data));
  int suma;
  printf("Client\n");

  int a, b, c;
  printf("Type the first number: ");
  scanf("%d",&a);
  printf("Type the second number: ");
  scanf("%d",&b);
  printf("Type the third number: ");
  scanf("%d",&c);  

  d.a = a;
  d.b = b;
  d.c = c;
  d.port = serv_addr.sin_port;

  callrpc("localhost",PROGRAM_EXEC, VERSIUNE_EXEC,EXEC_ADD,(xdrproc_t)xdr_Data,(char*)&d,(xdrproc_t)xdr_Data,(char*)r);

  printf("The numbers with the greater sum are: %d, %d, %d\n", r->a,r->b,r->c);

【问题讨论】:

【参考方案1】:

默认的服务器例程实际上带了第二个参数struct svc_req *rqstp,从中可以确定客户端的IP地址。

所以您的添加函数定义应如下所示:

Data* add(Data* d, struct svc_req *rqstp) 

您可以从rqstp-&gt;rq_xprt-&gt;xp_raddr.sin_addr 成员中确定客户端的IP 地址,同上从rqstp-&gt;rq_xprt-&gt;xp_raddr.sin_port 成员中确定端口。

因为您使用的是registerrpc,这意味着该服务将仅在UDP 上可用,而在 IPv6 上不可用,这意味着该地址是一个 32 位的值,返回是微不足道的。

我没有足够的 RPC over IPv6 经验,无法给出我知道在那种情况下会起作用的答案。

【讨论】:

es6 对象的 getter、setter 和函数不适用于远程过程调用 (zerorpc)

】es6对象的getter、setter和函数不适用于远程过程调用(zerorpc)【英文标题】:es6object\'sgetters,setters,andfunctionsdon\'tworkwithremoteprocedurecalls(zerorpc)【发布时间】:2016-07-1814:33:26【问题描述】:我有以下课程。classUserconstructor(username)this._u... 查看详情

远程过程调用与本地过程调用

...,允许客户端和服务器软件在分布式环境中进行通信。LPC用于两个 查看详情

关闭135139445转

135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务。 端口说明:135端口主要用于使用RPC(Remote Procedure Call,远程过程调用)协议并提供DCOM(分布式组件对... 查看详情

什么是远程过程调用?

什么是远程过程调用?远程过程调用RemoteProcedureCall进程间通信(IPC)是在多任务操作系统或联网的计算机之间运行的程序和进程所用的通信技术。有两种类型的进程间通信(IPC)。本地过程调用(LPC)LPC用在多任务操作系统中,使得同... 查看详情

javarmi远程通讯

...替Sockets的协议是RPC(RemoteProcedureCall),它抽象出了通讯接口用于过程调用,使得编程者调用一个远程过程和调用本地过程同样方便。RPC系统采用XDR 查看详情

什么是rfc

...一些资料。概念:什么是RFCRFC(remoteprocedurecallprotocal):远程过程调用协议简单来讲就是远程调用,有两个应用分别部在两台服务器A和B上,现在A服务器上的应用想调用B服务器上的某个方法,但是由于两个应用不在一个内存空间... 查看详情

rpcapi介绍与实现(代码片段)

...rocedureCall,远程过程调用)是一种通信协议,用于使远程计算机之间的程序能够相互调用。与本地调用类似,远程调用的过程是将一个请求发送到远程计算机上,远程计算机执行该请求并将结果返回给本地计... 查看详情

如何在 Unix 套接字编程中获取本地 IP 地址和端口?

】如何在Unix套接字编程中获取本地IP地址和端口?【英文标题】:HowtogetlocalIPaddressandportinUnixsocketprogramming?【发布时间】:2012-04-2709:27:42【问题描述】:我用这个地址作为创建新服务器的地址(socket(),bind(),listen()):structsockaddr_innew... 查看详情

什么是socket?简述基于tcp协议的套接字通信流程?

...sp;Socket的英文原义是"孔"或"插座"。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种... 查看详情

关于getsockname()/getpeername()函数第一次被调用得到0.0.0.0结果的说明

...,书本末尾介绍了两个函数getsockname()和getpeername(),可以用于获取服务器端和客户端的IP地址与端口,原本很简单的两个函数,过一眼即明白函数的用法,但在实际编程测试中,却出现了一个让人意外的结果,这两个函数在第一... 查看详情

prc远程过程调用

...all)一种进程间通信方式。允许像调用本地服务一样调用远程服务。RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使... 查看详情

远程桌面连接的端口号是多少?

...物理存在的端口,如ADSLModem、集线器、交换机、路由器上用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏... 查看详情

用于在远程系统上归档文件的 Unix shell 脚本

】用于在远程系统上归档文件的Unixshell脚本【英文标题】:UnixshellscripttoarchivefilesonRemotesystem【发布时间】:2012-08-0612:04:17【问题描述】:我需要在远程位置存档文件。即,我需要编写一个shell脚本,该脚本将从该路径连接到远程... 查看详情

远程过程调用的优缺点是啥

】远程过程调用的优缺点是啥【英文标题】:WhataretheadvantagesanddisadvantagesofRemoteProcedureCalls远程过程调用的优缺点是什么【发布时间】:2010-04-0706:25:48【问题描述】:谁能提供具体的链接,说明RPC相对于其他进程间通信模型的优... 查看详情

nfs服务的基本配置

...FileSystem)是一个历史悠久的协议,由SUN公司于1984年开发,用于在UNIX-like系统之间共享某些目录,采用C/S架构,NFS服务器是一个大型文件服务器,将自己想要共享的某些目录设置为输出目录,然后客户端将需要的目录挂载到自己文... 查看详情

acl访问控制列表(代码片段)

...功能端口协议说明21FTPFTP服务器所开放的控制端口23TELNET用于远程登录,可以远程控制管理目标计算机25SMTPSMTP服务开端的端口,用于发送邮件80HTTP超文本传输协议110POP3用于邮件的接收UDP用户数据协议无连接、不可靠的传输协议花... 查看详情

远程过程调用和 MIDL:如何实现具有 [out] 属性的功能?

】远程过程调用和MIDL:如何实现具有[out]属性的功能?【英文标题】:RemoteProcedureCallandMIDL:Howtoimplementfunctionwith[out]attribute?【发布时间】:2017-08-3117:02:25【问题描述】:我正在使用C++中的接口定义语言和远程过程调用来编写服务... 查看详情

jmeter远程分布式调用配置记录

...署好了dubbo服务的机器上测试,多次尝试后选择了用jmeter远程分布式调用的方式。jmeter远程分布式调用,可以使用本机做控制端,其他已经搭建好dubbo协议的电脑或者linux服务器做测试服务端配置要求是两台windows机(ip:134.33.***.1... 查看详情