Задача: есть сокет, через него отправляю запросы и получаю ответы. Изначально он был написан на php, но мне надо переделать его на python. Сокет создан, обмен сообщениями происходит, но я не могу расшифровать ответ сервера. В php функция выглядит так:
function CalcDataSize($fp)
{
$sz = '';
$packdata = fread($fp,10);
$arr = unpack('N',$packdata);
$sz = implode("",$arr);
return $sz-4;
}
$fp = fsockopen("111.11.1.11", 1111, $errno, $errstr,100);
if (!$fp)
echo "$errstr ($errno)<br />\n";
else
{
$command = '<command>some command<command>';
$command = PackData($command,$len);
fputs($fp,$command,$len);
print fread($fp, CalcDataSize($fp));
}
Меня интересует ответ сервера. Итак, он приходит в виде байтовой строки, которая читается на длину CalcDataSize($fp) (высчитывается путем прочтения первых четырех байтов ответа, их распаковки и получения числа sz-4).
Вопрос: как это правильно реализовать на python? Ответ приходит всегда 4 байта, декодировать методом .decode() не получается - ошибка в 3 знаке. Пробовал переводить в другие форматы - неправильный ответ. Высчитывал длину строки, получил число data_unpack эквивалентное CalcDataSize. Но как его дальше применить?
data = sock.recv(1024)
data = struct.unpack('>L', data[:4])
data_unpack = int(''.join(map(str,data)))-4
В php все работает отлично - ответ в виде строки, которая выглядит как xml.
<?xml version="1.0" encoding="UTF-8"?><greeting></greeting>
CalcDataSize($fp) (высчитывается путем прочтения первых четырех байтов ответа, их распаковки и получения числа sz-4).
Для получения целого числа из байтов используйте
data = sock.recv(1024)
CalcDataSize = int.from_bytes(data[0:4], byteorder='big') - 4
Для получения следующего сообщения требуется прочитать из сокета данные еще раз
data = sock.recv(CalcDataSize)
Далее используйте xml парсер, если ответ приходит в данном виде
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
народ! Прошу помощи, никак не получается подключить библиотеку pgsqlso и pdo_pgsql
Объясните, пожалуйста, как работает рекурсивная функция на примере вычисления факториала из числа 4