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

时间:2012-10-23 09:15:07

标签: c rpc distributed-computing xdr

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

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

对于Ex:如果我向服务器A发送消息 Hello ,则服务器A也应该将其转发到服务器B.服务器B获取消息并且不打印它。相反,当我向服务器B发送消息您好时,它会打印出来 的 HELLOHI 即可。 这意味着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 = “你好”;
  rpc_broadcast(他人,TICKER_PROG,TICKER_VERS,PASS_DETAILS,(xdrproc_t)xdr_xaction_args,&安培; AG);

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

1 个答案:

答案 0 :(得分:1)

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

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

所以它不是很有趣,它是设计的标准逻辑行为