我目前正在使用C ++中的套接字工作。
我有一个发送字符串的函数:
void SocketServer::SendData(int id_client, const std::string &str)
{
int size = str.size();
send(id_client, &size, 4, 0);
send(id_client, str.c_str(), str.size(), 0);
}
首先,我发送4个字节,对应于我想发送的字符串的长度。
然后,我有一个接收字符串的函数:
int SocketServer::ReceiveData(int id_client)
{
char buffer[1024]; // <<< this line, bad idea, I want to use unique_ptr
int size = 0;
int ret = 0;
ret = recv(id_client, &size, 4, 0); //<<< Now I know the length of the string I will get
if (ret >= 0)
{
ret = recv(id_client, buffer, size, 0);
if (ret >= 0)
{
buffer[ret] = '\0';
std::cout << "Received: " << buffer << std::endl;
}
}
return (ret);
}
我不想使用固定缓冲区,我想使用unique_ptr(因为它是尊重RAII的好方法)
我怎么能这样做?
非常感谢
答案 0 :(得分:5)
您可以改为使用std::string
:
std::string buffer;
int size = 0;
int ret = 0;
ret = recv(id_client, &size, 4, 0);
buffer.resize(size);
//later..
recv(id_client, &buffer[0], size, 0);
buffer
现在将包含收到的数据和正确的大小。由于RAII,它也将被销毁。