有几种方法可以通过套接字以字符串的形式交换数据,例如:
使用以下功能:
sprintf()
和sscanf()
snprintf()
和sscanf()
printf()
和strtof()
或转换为char然后将其作为数组传递
如果您能提出哪种方式以及为什么它比其他方式更有效率更好,或者如果还有其他方法未提及,我将不胜感激。目前我使用最简单的方法,我的意思是sprintf()
和sscanf()
函数。但我在网上看到,例如使用snprintf()
功能更安全。
答案 0 :(得分:3)
如果只是想发送字符串,你就可以逃避这样的事情;它是一个简单形式的序列化:一个包含以下数据大小的标题..(伪代码)
Send( socket, const string& str )
{
const size_t len = str.length();
send( socket, &len, sizeof( len ) );
send( socket, str.data(), len );
}
Receive( socket, string& str )
{
size_t len;
receive( socket, &len, sizeof( len ) );
str.resize( len );
receive( socket, str.data(), len );
}
编辑:请参阅注释1,更快的发送方法将是
Send( socket, const string& str, rawmemory& packet )
{
const size_t len = str.length();
packet.Reserve( len + sizeof( len ) );
packet.ResetOffset();
packet.CopyFrom( &len, sizeof( len ) );
packet.CopyFrom( str.data(), len );
send( socket, packet.Data(), packet.Length() );
}
答案 1 :(得分:1)
在C ++中,您也可以使用StringStream
stringstream ss;
int i = 1;
float f = "1.0";
char separtor = ';';
ss << i << separtor << f;
然后,您可以使用ss.str().c_str()
ss.str().c_str()
将导致上述情况
“
1; 1.0
“
答案 2 :(得分:0)
看看Serialization—How to Pack Data。
发送文本数据非常简单 通过网络,你发现, 但是如果你想发送会发生什么 一些“二进制”数据,如整数或 浮动?事实证明你有一些 选项。
- 使用类似sprintf()的函数将数字转换为文本 发送文字。接收器将解析 使用a将文本重新转换为数字 功能类似于strtol()。
- 只需发送数据raw,将指针传递给send()。
- 将数字编码为便携式二进制格式。收件人 将解码它。
醇>