2011-12-05 30 views
0

TCPソケット接続を介して文字列を送信しようとしています。問題は、Windowsソケットはconst charデータ配列しか取らないということです。ソケットを使用してストリングストリーム・データ型を送信する最も効率的な方法は何でしょうか?Windowsソケットは文字列を送信します

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

Windowsネイティブソケットライブラリでは、このジョブでは十分でない場合は、別のソケットライブラリを知りたいと思います。また、スレッド化のためにBoost C++ライブラリを使用し始めました。ソケットライブラリーはもう少し進んでいますが、stringstreamの送信をサポートしているかどうかは不明です。

std::stringstream ss(...); 

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

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

答えて

1

stringstreamdocumetationを参照してください、const char*を取得するための機能を提供します。 C++のバイトデータ型はcharです。

は、ソケット間でより複雑なデータ型を送信するには、プロトコルを必要としています。 Windowsは(DCE)RPCを提供します。多くの人がSOAPを使用しています。他にもたくさんあります。

stringsrteamは、文字が含まれています。接続の両端を制御する場合、文字とバイトの違いが重要ではない場合があります。そうでない場合は、同じ文字エンコーディングを使用するように注意しない限り、両者の解釈が一致しない可能性がありますので、非常に重要です。

+0

'stringstream'は' const char * 'を得るために使用できる' std :: string'を検索する関数を提供していると思いますか? :) –

+0

はい、もちろんです。私が言いたいのは、 'stringstream'からCの文字列を取得するのはそれほど複雑ではないということです。 – Constantinius

+0

'stringstream :: str()'を一度呼び出すと、その結果をローカル変数に格納する必要があります。インラインで2回呼び出すのではなく、2つの一時的な 'std :: string'インスタンスを割り当てて解放してください。 –

0

ソケットAPIの目的はバイトを送信することです:事前に

おかげ

関連する問題