如何通过ssl和socket发送目标文件.o

时间:2011-10-26 13:39:28

标签: c ssl file-io send

我需要从客户端向服务器程序发送一个目标文件。 我尝试读取文件,将其存储到缓冲区,通过ssl发送缓冲区并写入服务器程序中的文件。 这对.o文件不起作用。这就是ELF。

这是我的一些代码

读取文件

void readFile(char filename[])  
{
    FILE        *input_file;
    char        line[BUFSIZ];

    input_file = fopen(filename, "r");

    if(input_file == NULL){
        printf("cannot open input_file '%s'\n", filename );
        exit(EXIT_FAILURE);
    }

while (fgets(line,sizeof line, input_file) != NULL) {

    for(int i = 0; i<strlen(line); i++){
        current_file[i] = line[i];
    }   
}}

客户端发送文件

    readFile(filename);
    ctx = InitCTX();  
    server = OpenConnection(hostname, atoi(portnum));  
    ssl = SSL_new(ctx);      /* create new SSL connection state */  
    SSL_set_fd(ssl, server);    /* attach the socket descriptor */  
    if ( SSL_connect(ssl) == FAIL )   /* perform the connection */  
        ERR_print_errors_fp(stderr);  
    else  
    {   

        printf("Connected with %s encryption\n", SSL_get_cipher(ssl));  
        ShowCerts(ssl);        /* get any certs */  
        SSL_write(ssl, current_file, strlen(current_file));

是否可以读取目标文件,然后将其存储在缓冲区中?

是否有其他方法可以发送这些文件?

2 个答案:

答案 0 :(得分:2)

.o文件没有什么“特别”,它只是存储在光盘上的一系列字节,并为其分配了文件名和扩展名。

我的猜测是你需要以不同的方式处理文件,因为它将是二进制数据。它不具有您当前正在阅读的“通常”线条概念。

我看看以下内容: http://www.linuxquestions.org/questions/programming-9/c-howto-read-binary-file-into-buffer-172985/

首先尝试读取然后在本地写入文件以检查它是在传输中还是在本地I / O例程中被损坏?

答案 1 :(得分:0)

这是用于缓冲二进制文件(如“对象”文件)的示例代码。为简洁起见,检查和指针维护并不存在。

 FILE *file;
 char *buffer;
 unsigned long len;
 unsigned char buffer*;
 //open in binary mode
 file = fopen(name, "rb");
 //check file size
 fseek(file, 0, SEEK_END);
 len = ftell(file);
 fseek(file, 0, SEEK_SET);
 //allocate buffer accordingly
 buffer = (unsigned char *) calloc (1, fileLen + 1); //1 byte for the terminator
 //Store into buffer
 fread(buffer, len, 1, file);