簡體   English   中英

2台服務器之間的通信(C語言)

[英]Communication Between 2 Servers (C Language)

我正在嘗試創建一個分布式系統,其中客戶端將一些信息發送到一台服務器,該服務器接收消息並將其轉發到所有其他服務器 該系統利用RPC和XDR作為其接口定義語言。

我得到了服務器接收消息的部分。 但是我無法將郵件轉發到其他服務器。 即使我設法轉發該消息,也只有在客戶端還將消息發送到該特定服務器 (即與該消息一起)的情況下才打印。

例如:如果我向服務器A發送消息Hello ,並且服務器A也應將其轉發到服務器B。 服務器B收到消息並且不打印它。 相反,當我向服務器B發送消息Hi時 ,它將輸出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 =“ Hello”;
rpc_broadcast(others,TICKER_PROG,TICKER_VERS,PASS_DETAILS,(xdrproc_t)xdr_xaction_args,&ag);

passMsg是XDR文件中定義的結構中的變量。

添加\\ n是有效的,因為它會刷新當前的printf緩沖區。 通常調用printf時,OS也不必立即輸出該信息。 它可以緩沖一段時間並在某些不可預測的時間執行。 沖洗打印緩沖區可確保立即進行打印。

或者,您可能使用了一些未緩沖的系統調用,例如perror()

所以這不是很有趣,這是設計使然的標准邏輯行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM