2台服务器之间的通信(C语言)

标签 c rpc distributed-computing xdr

我正在尝试创建一个分布式系统,其中客户端将一些信息发送到一台服务器,服务器接收消息并将其转发到所有其他服务器。 该系统使用RPC和XDR作为其接口(interface)定义语言。

我得到了服务器接收消息的部分。但我无法将消息转发到其他服务器。即使我设法转发消息,它也只会打印如果客户端也向该特定服务器发送消息,即与该消息一起发送。

例如:如果我向服务器 A 发送消息 Hello,服务器 A 也应该将其转发到服务器 B。服务器 B 收到消息但不打印它。相反,当我向服务器 B 发送消息 Hi 时,它会打印 你好。 这意味着 B 收到了消息,但没有完全打印出来。

对于为什么会发生这种情况有什么建议吗?我使用 rpc_broadcast 将从客户端收到的消息广播到其他服务器。

Edit1:这是我在所有服务器收到广播时尝试调用的方法。我只是想在在那里实现我的逻辑之前打印一个静态的 HELLO THERE 来看看它是否有效。

int *
pass_details_1_svc (xaction_args *argp, struct svc_req *rqstp)
{
    int *i;
   printf("HELLO THERE");   
   return i;
}

这是我收到客户端消息时执行的 rpc_broadcast 调用:

xaction_args ag; ag.passMsg="Hello";
rpc_broadcast(others,TICKER_PROG,TICKER_VERS,PASS_DETAILS,(xdrproc_t)xdr_xaction_args,&ag);

passMsg 是 XDR 文件中定义的结构中的变量。

最佳答案

添加\n 有效,因为它会刷新当前的 printf 缓冲区。当您通常调用 printf 时,操作系统不必立即输出该内容。它可以缓冲一段时间并在某个不可预测的时间执行。清空打印缓冲区可确保立即打印。

或者,您可以使用一些未缓冲的系统调用,例如 perror()

所以这并不好笑,这是设计的标准逻辑行为

关于2台服务器之间的通信(C语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13027106/

相关文章:

将 c 字符串中的字符转换为其转义序列

c++ - rpcrt4.dll 是否是开源/免费库?我可以将该库捆绑到我的应用程序吗

java - 客户端服务器应用程序的设计模式

kotlin - 一个 NettyServer 的 Avro RPC 多个响应程序

architecture - 节点如何加入分布式哈希表 (DHT) 集群?

neural-network - tensorflow 。 Cifar10 多 gpu 示例使用更多 gpu 时性能更差

c - C 中指针的缓冲区溢出

c - 为什么 sizeof 的赋值会改变从 size_t 赋值给 int 的变量类型?

python - 在处理 Flask 请求的同一服务器上运行 Celery 任务

c++ - 将 GL_TRIANGLE_STRIP 显示为线框