接收文件时出错

时间:2011-12-21 15:57:59

标签: 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”,因此send返回-1。 问题是将文件写入新的文件描述符,在本例中是名为dest的变量。 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

根据the manual-page for send(2),它只能写入套接字,而不能写入常规文件;如果您选中errno(使用例如perror),您会看到它已设置为ENOTSOCK。您应该始终看到正在设置错误,否则调试只是在黑暗中拍摄。

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

答案 1 :(得分:0)

检查

的返回值
dest=open("/root/hello.txt",O_WRONLY);

它应该是一个正整数;其他一切都表示错误。我的猜测是,无论出于何种原因,都无法打开文件。