2017-02-17 120 views
1

我是新來的C++,我開始用boost來編寫我的服務器。我在網絡和官方文檔中都遵循了很多示例。但是,我沒有發現任何東西(也許我沒有問這個好問題)關於這個 - >與特定客戶進行交流。我的意思是覺得─>C++與特定客戶端進行通信Boost asio

老問題:

服務器啓動和等待連接 - >客戶端(1)通過 TCP的連接>服務器接受客戶端,並開始async_read

假設3個客戶端也連接 - >

我怎麼會告訴我的服務器也寫太客戶端(2)或(3),但不是 都?

我表達我自己不好

新問題:

我的服務器做工精細,當客戶端將數據發送到服務器(自定義客戶端在虛幻引擎4),他可以讀它,然後寫回到我的客戶沒有問題。我尋找一種方式與我想要的客戶交談,而不需要他發送數據。示例:

客戶端1寫入服務器 - >數據發送到服務器啓動下一個操作 - >寫入特定的客戶端。

更具體的例子:

客戶端1要發送請求的客戶端10,所以客戶端1寫入到服務器的行動«動作,ID客戶端»(請求,10),那麼服務器知道他需要與客戶10交談併發送請求。

我的問題不在客戶端,而是在服務器端。

我相信這很容易,我只是不明白一些基本的東西,如果有人可以提供給我一個方向,一個例子或只是一個解釋,它將不勝感激。感謝您的未來答案。

編輯:

如果有人有很難像我這樣的(我知道這是容易的,但我們永遠不知道:對,也許它可以幫助別人),這裏的答案。

我包括此,我用它來連接,編寫,發送文件等

std::map<int, tcp::socket> playerRemote; 

裏面我把它 - >

​​

使用插座 - >

boost::asio::async_read(playerRemote.at(id_to_use) 

問題解決!感謝幫助!

+0

老兄...這個例子無處不在!看看這裏:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/examples/cpp11_examples.html –

+1

問題是什麼?如果您有三個接受,存儲並等待通過'async_read'接收數據的套接字,則可以在連接到特定客戶端的套接字上調用'write'或'async_write'。 –

+0

如果你想發送數據到特定的客戶端,你可以將它們存儲在,例如,一個'std :: map'以及IPv4/6地址或名稱,併發送數據...就那麼簡單。 – Blacktempel

回答

1

每當你的服務器程序做了一個accept它得到一個新的套接字與另一端的新客戶端。

通常的做法是使用這個新套接字創建並初始化某種對象。然後你將這個對象放入某種結構中。像一套,一張地圖,一張矢量,一張清單,什麼東西真的。

當你想要一個特定的客戶端,然後搜索它的數據結構。如果您使用了map或unordered_map,那麼您可以通過您使用的任何鍵快速獲取它。

現在你有你的客戶端對象,你可以調用它的方法。就像您自己的「發送」版本一樣,它可以將其添加到每個客戶端緩衝區。由於Boost ASIO中的消息發送是異步的(它的名稱正好),因此您知道您可能無法立即發送消息。

Boost ASIO聊天示例應用程序對此很有幫助。

看看量子物理學家發表評論的鏈接。特別是這一個:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/chat/chat_server.cpp

+0

感謝您的回答!我已經嘗試將套接字放入地圖中,但它給了我一個錯誤。我會編輯我的問題,讓你知道我是如何做的以及錯誤是什麼,再次感謝! – GabrielProL

+0

我終於明白了!我用答案編輯我的文章,即使這是一項簡單的任務,也許有人會使用它。如果你對我的做法有一些精確性,我願意接受所有建議!感謝大家分享你的答案! – GabrielProL

相關問題