Как написать программу для передачи файлов на основе omniORBpy

Сейчас я пишу проект Corba для передачи файлов между клиентом и сервером. Но я сталкиваюсь с проблемой, когда хочу загрузить файл с клиента на сервер.

IDL, который я определил:

interface SecretMessage
{
    string send_file(in string file_name, in string file_obj);
};

И я реализовал функцию загрузки в коде клиента:

f = open('SB.docx', 'rb')
data = ''
for piece in read_in_chunks(f):
    data += piece

result = mo.send_file('2.docx', data)

Если файл представляет собой обычный текстовый файл, проблем нет. Но если файл, как jpg, doc или другие, кроме txt, то он работает. Это дает мне ошибку:

omniORB.CORBA.BAD_PARAM: CORBA.BAD_PARAM(omniORB.BAD_PARAM_WrongPythonType, CORBA.COMPLETED_NO)

В чем проблема?

1 ответ

Решение

Я думаю, что это потому, что по умолчанию omniORB хочет видеть данные ASCII для строк. Попробуйте изменить свой IDL на это

interface SecretMessage
{
    typedef sequence<octet> OctetSequence;
    string send_file(in string file_name, in OctetSequence file_obj);
};

Вы можете сохранить свой клиентский код Python таким же, потому что в отображении IDL на Python последовательности октетов отображаются на строки Python.

Другие вопросы по тегам