2011-12-05 116 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包含字符。如果您控制连接的两端,字符和字节之间的差异可能并不重要。如果你不这样做,这可能是非常重要的,因为除非你仔细确保两者都使用相同的字符编码,否则两端可能不同意解释。