2016-08-20 66 views
0

我通過聊天示例應用程序學習boost :: asio。在該示例中,它向所有參與者發送消息。我想添加一個私人聊天功能(私人聊天使用服務器作爲中繼)。Boost :: Asio聊天示例程序---如何實現私聊

爲了保持簡單的問題,我們假設我們只有兩個客戶端A和B.到 我認爲如果在連接時將A和B的套接字保存到地圖中,之後,如果A想要與B交談,我搜索A的套接字(從而找到B的套接字),然後將消息發送到B的套接字。

但是,這似乎是一個相當困難的任務。有沒有辦法做到這一點?

+0

這不是一件困難的事情。您必須閱讀文檔,並通過互聯網查看示例。谷歌吐出了很多示例用法。從你剛纔提到的開始,然後嘗試一個聊天室。一臺服務器多臺客戶機之後,你很熟悉boost :: asio。 – Blacktempel

回答

1

當然可以。

如果您正在尋找在C++ 11例,那麼你就可以做到以下幾點:

  1. 的chat_participant添加一個新的屬性(一個ID)在chat_server.cpp
  2. 添加register_client功能chat_client.cpp,它向每個客戶註冊一個id。
  3. 變化的代碼chat_room::deliver

    for (auto participant: participants_) { 
        if(participant->id == recipient_id) 
         participant->deliver(msg); 
    } 
    

以上是以下行只是給你如何做到這一點的一般概念。

希望它是有道理的。

+0

謝謝。這是有道理的。 – FlatWorld

+0

如果我不修改client.cpp怎麼辦?這隻能在服務器端完成嗎?是否可以創建一個std :: map並將兩個客戶端的套接字保存到地圖中?我在普通套接字應用程序中使用了這種方法,因爲套接字是一個整數。然而,在Boost ASIO似乎很難做到這一點,因爲套接字是一個對象... – FlatWorld

+0

剛剛再次檢查了代碼。 std :: map存在問題。我糾正了它。它現在支持私人聊天! – FlatWorld