c++ - 接收文件错误

标签 c++ c file file-upload recv

我有这个代码:

while (1) {
    char buffer[4096];
    memset(buffer,0,4096);
    int bytes_read = recv(client_fd, buffer, sizeof(buffer),0);
    if (bytes_read == 0)
        break;
    if (bytes_read < 0) {
        std::cout<< "Error "<<endl;
    }
    void *p = buffer;
    int dest;
    dest=open("/root/hello.txt",O_WRONLY);
    while (bytes_read > 0) {
        int bytes_written = send(dest, buffer, bytes_read,0);
        if (bytes_written <= 0) {
            std::cout<< "Error2 "<<endl;
        }
        bytes_read -= bytes_written;
        p += bytes_written;
    }
}

我正确地收到了文件。 程序进入循环,其中 cout 为“Error2”,因此发送返回 -1。 问题是将文件写入新的文件描述符,在本例中为名为 dest 的变量。 我该如何解决这个问题?

最佳答案

根据 the manual-page for send(2) ,它只能写入套接字,不能写入常规文件;如果您检查了 errno(使用例如 perror ),您会看到它被设置为 ENOTSOCK。您应该始终看到正在设置的什么错误,否则调试只是在摸黑。

此外,由于这是 C++,我真的认为您应该使用 C++ 风格的 I/O(std::ofstream 等)来写入常规文件。

关于c++ - 接收文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592645/

相关文章:

c++ - 与模板类中的友元函数链接错误

c++ - 删除 QComboBox "Drop-Down"动画

c++ - GCC 和 Clang 竖起大拇指 - Visual Studio 之旅。逻辑错误?

c - 验证来自内核的文件数字签名

javascript - 如何检测 js 文件在运行时是否被缩小 (Node.js)

c++ - 在 C++ 中初始化为 NULL 的字符串

c - Linux/Windows 中的 sleep()/Sleep() 行为

c - uint8_t 类型数组的元素是否总是被打包到连续的内存字节中?

c - 已经启动了多少个控制台应用程序副本

java - 仅读取文件夹中的最后两个文本文件