使用管道我想用C,而我的朋友編程客戶端一個小組聊天系統的服務器端程序。對於服務器接收的每個客戶端連接,它會分派子進程以處理客戶端並繼續接受任何可能的更多客戶端。與多個客戶端
服務器需要發送所有在線用戶(連接的客戶端)的列表,每個當前連接的客戶機,爲此我已經使用管道。基本上,當創建子進程時,它通過套接字接收來自客戶端的信息,並通過管道將這些信息發送給父節點,父節點保存所有客戶端的列表。每當客戶做出改變,如開始聊天或斷開連接時,該列表必須更新。例如,如果客戶端斷開連接,則子節點通過管道將消息發送給父節點,並且父節點對列表進行必要的操作以使其得到更新。請注意,管道是爲每個新連接創建的。
我的問題是,例如,如果我收到接連3連接一個和第二個孩子斷開,父不讀書從管道的信息,因爲這樣的父母已經從第二個孩子不同的管道。 (請記住,由於已建立第三個連接,因此已創建新管道)。我該如何解決這個問題?
我也嘗試過創建一個通用管道,但是如果在讀/寫之前我沒有關閉管道,那麼我得到一個錯誤,如果我關閉它們,當第二個客戶端連接時會出現分段錯誤,關閉。
任何幫助將不勝感激,因爲我一直在尋找了幾個小時也沒有用。
謝謝。當創建一個孩子,因爲它創建子
我建議尋找像'epoll'這樣的東西,以便您可以更輕鬆地在單個進程中保持所有併發連接的規模。然後,您不需要通過管道進行交談,並可以以異步方式直接與套接字進行通話。 –
事實上,你應該使用套接字和異步IO而不是管道。 (您可能希望在您的實現中構建此庫:https://developer.gnome.org/glib) – moooeeeep
我仍然能夠在所有客戶端之間保留一個通用列表嗎? – gracey