Как отправить объектный файл .o через ssl и сокет - PullRequest
1 голос
/ 26 октября 2011

Мне нужно отправить объектный файл с моего клиента на серверную программу. Я попытался прочитать файл, сохранить его в буфер, отправил буфер через 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 ]

2 голосов
/ 26 октября 2011

В файле .o нет ничего «особенного», это просто серия байтов, сохраненных на диске, с присвоенным ему именем файла и расширением.

Я думаю, вам нужно обработать файлв отличие от того, что у вас там, так как это будут двоичные данные.У него не будет «обычной» концепции строк, в которых вы сейчас читаете.

Я бы взглянул на следующее: http://www.linuxquestions.org/questions/programming-9/c-howto-read-binary-file-into-buffer-172985/

Попробуйте прочитать, а затем написать свойсначала файл локально, чтобы проверить, не поврежден ли он при передаче или в локальных подпрограммах ввода / вывода?

0 голосов
/ 26 октября 2011

Это пример кода для буферизации двоичных файлов, таких как «объектные». Чеки и обслуживание указателей не для краткости.

 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...