Сообщение, отправленное через сокет, отсутствует \ n - PullRequest
0 голосов
/ 21 ноября 2018

Я генерирую протокол для сокета tcpip между python и matlab.При попытке настроить какой-то протокол я столкнулся с проблемой.Это связано с этим набором кода ниже

FPath = Path('c:/test/dogg.jpg')     
HASH = Commons.get_file_md5_hash((FPath))

msg = ('IDINFO'+FPath.name+'HASH'+ HASH+'\n')

генерирует сообщение

IDINFOdogg.jpgHASH7ad1a930dab3c099939b66267b5c57f8

Я имею в сообщении: IDINFO, который сообщит серверу имя файлаи HASH, который сообщит подробности файла.

После этого я открываю файл, используя

f = open(FPath,"rb")
chunk = f.read(1020)

и собираю пакет с тегом DATA впереди

msg = b`DATA` + chunk + b'\n'

Проблема в том, что b'\n' не такой, как в первом сообщении.поскольку Matlab не может прочитать разделитель и не будет продолжать захват фрагментов данных.

Код Matlab для ссылки ниже.Это не весь объект, а та часть, которая потенциально может вызвать проблемы.Для настройки обратного вызова.

       set(gh.tcpipServer, 'BytesAvailableFcnMode','Terminator');
       set(gh.tcpipServer, 'BytesAvailableFcn', @(h,e)gh.Serverpull(h,e)); 

Функция для просмотра байтов

    function Serverpull(gh,h,e)
        gh.msg = fread(gh.tcpipServer,gh.tcpipServer.BytesAvailable);
        gh.msgdecode = char(transpose(gh.msg));

        if strfind(gh.msgdecode,'IDINFO')
            Hst = strfind(gh.msgdecode,'HASH');
            gh.Fname = gh.msgdecode(7:Hst-1);
            gh.HASH = gh.msgdecode(Hst+4:end);
            fwrite(gh.tcpipServer,'GoodToGo');

            gh.PrepareforDataAq()
        elseif strfind(gh.msgdecode,'DATA')
            fwrite(gh.fileID,gh.msg(5:end),'double');
        elseif strfind(gh.msgdecode,'EOF')
            fclose(gh.fileID);
            display('File Transfer Complete')
        end
    end
    function PrepareforDataAq(gh)
        path = fullfile('c:\temp\',gh.Fname);
        gh.fileID = fopen(path,'w');

    end    

Для TLDR,

Как сделать строку '\n' одинаковойкак b \n при построении tcp-сообщения из двоичного файла вместо строк перед кодированием?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...