2011-12-05 152 views
0

我想通過TCP套接字連接發送一個stringstream。問題是,Windows套接字只需要一個const char數據數組。什麼是使用套接字發送stringstream數據類型的最好和最有效的方法?Windows套接字發送stringstream

char *szMessage="Hello World"; 
send(Socket,szMessage,strlen(szMessage),0); 

我願意學習不同的套接字庫,如果Windows本地套接字庫不足以完成這項工作。此外,我也剛剛開始使用Boost C++庫進行線程化,並且它們的套接字庫看起來更先進一些,但我不確定它是否支持發送stringstream。

在此先感謝

回答

1

stringstream提供的功能來檢索const char*,看到documetation

std::stringstream ss(...); 

ss.str().c_str(); // now the const char * 

send(Socket,ss.str().c_str(),ss.str().length(),0); 
+0

我想你的意思是'stringstream'提供了一個函數來檢索一個'std :: string',它可以用來得到'const char *'? :) –

+0

當然可以。我想說的是,從'stringstream'中獲取C字符串並不複雜。 – Constantinius

+0

你應該調用'stringstream :: str()'一次並將結果存儲在一個局部變量中,而不是調用它兩次內聯,它將分配和釋放兩個臨時的'std :: string'實例。 –

0

套接字API的目的是要發送的字節。 C++中的字節數據類型爲char

要通過套接字發送更復雜的數據類型,您需要一個協議。 Windows提供(DCE)RPC。許多人使用SOAP。還有很多其他的。

A stringsrteam包含字符。如果您控制連接的兩端,字符和字節之間的差異可能並不重要。如果你不這樣做,這可能是非常重要的,因爲除非你仔細確保兩者都使用相同的字符編碼,否則兩端可能不同意解釋。