2015-05-21 159 views
0

發送和接收數據 我有定義爲一個矢量如下: 通過網絡

std::vector<char*> rooms; 
const int rows = 100; 
const int columns = 10; 

我需要發送這個向量作爲字符串緩衝區。然後接收並將字符串轉換爲具有相同大小的另一個向量。

這是我送的字符串:

int SendData(std::string data) 
{ 
    s.SendLine(data); 

    return 0; 
} 

我無法想象一個解決方案。

+0

就像一張紙條:你知道,當傳輸的數據變大,在接收端一個簡單的讀是不夠的 - 數據可以得到支離破碎通過的方式網絡。所以從一個發送,可能會導致多個接收。 –

+0

一個建議與這個問題無關:'std :: vector '可以是'std :: vector ' – elimad

回答

1

既然你已經知道如何發送一個字符串,並且向量只是一系列字符串,那麼發送向量最直接的方法就是簡單地發送字符串,一個接一個。

當然,魔鬼在細節中:接收者將如何知道需要多少個字符串?接收器將如何知道一個字符串結束,下一個字符串開始?

回答:在發送第一個字符串之前,請發送一些初始數據,指出您打算髮送多少個字符串。 (如果你想保持簡單,這可能是一個額外的字符串,比如接收者將會用作提示的「100」;或者你可以發送一個整數作爲一個或兩個或四個字節的二進制數據,如果你願意這樣做[請確保考慮排序問題,如果你發送它作爲多個字節])

至於接收器知道一個字符串結束和下一個開始,一種方法是確保發送每個字符串結尾的NUL/0字節;那麼接收者可以查找該字節來知道每個字符串的結束位置。另一種方式是在發送字符串本身之前發送字符串中的字節數,然後接收方可以確保讀取該字符串的許多字節。

0

你說你知道如何發送std::string,並且你想要將該向量作爲單個字符串發送。所以你所需要的就是在一個大字符串中轉換一個字符串向量。

你可以嘗試重塑的一種方式,或者只是使用(或模擬)別人已經想到:

  • 逗號分隔值
  • JSON
  • XML

所有有他們的優點和缺點。而棘手的部分是逃避「特殊」字符。

0

I need to send this vector as string buffer. And then receive and turn the string into another vector with same size.

這聽起來,你的解決方案建立在數據的字符串是一個解決方案,你的問題問到這一點,您希望您的解決方案還工作。但是,沒有使用手動編碼的字符串體操,有更好的方式來傳輸任何類型的數據。

如果您只想通過網絡發送任何類型的數據(如skalars,容器和自定義構建類實例),則應該考慮使用一個爲您做到這一點的庫,而無需一次又一次重新啓動輪子。如果這是您的案例搜索serializer,您將得到一個可用於所有類型數據的解決方案!

看一看http://www.boost.org/doc/libs/1_58_0/libs/serialization/doc/index.htmlhttps://developers.google.com/protocol-buffers/