gpt4 book ai didi

客户端 stub VS 客户端套接字和服务器 stub 以及服务器套接字

转载 作者:行者123 更新时间:2023-11-30 14:51:46 32 4
gpt4 key购买 nike

背景

Any client socket program(C) over TCP/IP looks like,

 /* Socket creation */
sockfd = socket(AF_INET, SOCK_STREAM, 0);

/* Do nothing for dynamic address assignment to that client socket */

/* Identify the server, we use to send a request for connection */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8000);
inet_pton(AF_INET, serv_ip, &servaddr.sin_addr);

/* Connect request to listening socket of server */
ret_val = connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

/*
*
Communication code
==================
Here comes the code for application layer protocol using read() & write() call that follow FTP, HTTP, SMTP specific rules.
*
*/

Any server socket program(C) over TCP/IP looks like,

  /* Create listen socket */
listfd = socket(AF_INET, SOCK_STREAM, 0);


/* Assign protocol family(AF_INET) & address to that socket */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(8004);
retval = bind(listfd, (struct sockaddr *) &servaddr, sizeof(servaddr));

/* Enable the communication on that socket */
listen(listfd, 5);

/* with a specific server model(iterative/threaded/multiprocess/..) accept
client request */
connfd = accept(listfd, (struct sockaddr *) &cliaddr, &clilen);

/*
*
Communication code
==================
Here comes the code for application layer protocol using read() & write() call that follow FTP, HTTP, SMTP specific rules.
*
*/
<小时/>

早期的主机到主机协议(protocol)专注于人机通信例如:电子邮件 1971 年、FTP 和可互操作的 Telnet:1973 年

人们对应用程序到应用程序协议(protocol)感兴趣 - RFC 707,它描述了网络过程调用的完成方式。

在ansi C世界中,

RPC是数据结构通过libnsl.so.1从客户端 stub 到服务器端 stub 的传输。数据结构 可以保存添加操作的消息(比如说),如下所示,

 -------------
| proc: "add" |
-------------
| int: val(i) |
-------------
| int: val(j) |
-------------
<小时/>

远程 add(i, j) 操作的 RPC 典型流程,

enter image description here

客户端和服务器的数据表示方式可能不同(大端和小端)。外部数据表示 (add_xdr.c) 是机器独立通信所需的数据抽象。

<小时/>
  1. RPC是一种独立于机器的通信吗?

  2. 在 RPC 世界中,客户端 stub 服务器 stub 之间的数据包处理代码的行为是否类似于客户端套接字服务器套接字?不同之处在于通信代码携带保存过程信息的数据结构add(i, j)

最佳答案

RPC 是独立于机器的,因为 32 位和 64 位系统都可以通信,但它不像不同操作系统之间的纯套接字那样具有互操作性,因为双方必须在更多细节上达成一致。

RPC 在端点之间进行传输,其中一些端点甚至不能表示为套接字(例如本地内存)。

您可以在 https://msdn.microsoft.com/en-us/library/windows/desktop/aa373935(v=vs.85).aspx 阅读有关 RPC 的内容

RPC 代码看起来确实与套接字代码有很大不同,因为调用代码中的 RPC 看起来像任何其他函数,只是在那些(通常是工具生成的)函数中,数据被捆绑用于传输。

关于客户端 stub VS 客户端套接字和服务器 stub 以及服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48030186/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com