我如何将recv答案捕获到函数中?

问题描述 投票:0回答:1

我想构建一个函数,其中传递 socket 作为参数,它调用函数

recv
并返回其答案。

这就是我构建它的方式:

char *recive_buffer(SOCKET socket)

{
    std::cout << "Reciving the buffer..." << std::endl;

    int recvbuflen = 512;

    char *recived_buffer;

    recv(socket, recived_buffer, recvbuflen, 0);


     return recived_buffer;

}

我希望它能够实现与

recv()
相同的功能,但只传递一个参数,即套接字。

但是当客户端向我的服务器发送消息时我无法得到任何答复。 我做错了什么?

顺便说一句,我正在开始学习C/C++,我可以改进这段代码逻辑和写作吗? 谢谢大家(;

====================================================== ======================= 编辑加

我正在构建大学的毕业作品,年初我选择了 C++,所以我必须继续前进。

我将代码修改为:

std::vector<char> recive(SOCKET socket)

{
    std::cout << "Reciving message..." << std::endl;

    std::vector<char> recived_buffer;
    
    recv(socket, recived_buffer, DEFAULT_BUFLEN, 0);

    return recived_buffer;
}

并收到错误:

error: no matching function for call to 'recv'
winsock2.h:992:34: note: candidate function not viable: no known conversion from 'std::vector<char>' to 'char *' for 2nd argument

我正在使用 QT Creator。

====================================================== ===================================== 编辑加

它工作了!

这就是我所做的:

std::string recive(SOCKET socket)

{
    std::cout << "Reciving message..." << std::endl;

    char recived_buffer[DEFAULT_BUFLEN];

    recv(socket, recived_buffer, DEFAULT_BUFLEN, 0);

    return recived_buffer;
}
c++ sockets pointers tcpserver windows-socket-api
1个回答
0
投票

recv
想要写入您提供的缓冲区。

char *recived_buffer;
不是缓冲区,它只是一个指针。另外
std::vector<char> recived_buffer;
只是一个空向量,没有空间供
recv
写入(暂时搁置,无论如何你都无法将向量传递给函数)。

您需要提供大小为

len
的缓冲区。您可以通过将向量大小调整为
DEFAULT_BUFLEN
,然后将指向向量数据的指针传递给函数 (
data()
) 来完成此操作。

您也不应该忽略返回值。它告诉您实际读取了多少字节,并通过

-1
返回值报告错误。收到字节后,您可能需要将向量的大小调整为实际读取的字节数。我不会讨论错误处理,因为我认为它超出了您的具体问题的范围。

一旦获得带有数据的向量,从函数返回它就不再是问题了。对于实际工作示例,我建议您参考文献。我可以在此处发布的玩具示例过于简化,只会误导您。

© www.soinside.com 2019 - 2024. All rights reserved.