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

Posted

技术标签:

【中文标题】2台服务器之间的通信(C语言)【英文标题】:Communication Between 2 Servers (C Language) 【发布时间】:2012-10-23 09:15:06 【问题描述】:

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

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

例如:如果我向服务器 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="你好"; rpc_broadcast(其他,TICKER_PROG,TICKER_VERS,PASS_DETAILS,(xdrproc_t)xdr_xaction_args,&ag);

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

【问题讨论】:

这就像从某人说“我看到外面有草”来预测天气。或者其他的东西。换句话说,我认为这是缺乏细节。 抱歉..我会更新问题.. 当你从服务器A发送到服务器B时,在Hello末尾加上“\n”表示传输结束 嗨 memosdp,谢谢。添加\n 有效。有趣的是,结尾字符如何使事情起作用。在下面添加您的评论作为答案,以便我接受。谢谢:) 不值一提的评论......尽管如此@fayyazkl 需要更多的努力 【参考方案1】:

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

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

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

【讨论】:

以上是关于2台服务器之间的通信(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

2个用不同语言编写的程序之间的通信 - 序列化?

C#如何在两台服务器之间进行通信

使用 Visual Studio 2010 在 C# 中的两台不同机器上运行的客户端和服务器之间的通信

多台计算机之间的套接字通信

节点和C应用程序之间的进程间通信

在C中的两台服务器之间传递数据的最佳方式?