Я пытаюсь отправить буфер через сокет домена unix в приложение, получить ту же структуру назад с обновленными значениями, а затем отправить этот буфер обратно в это приложение. Я могу отправить недавно упакованные данные и получить ответ обратно, но если я попытаюсь упаковать полученный буфер и отправить его снова через сокет, я столкнулся с ошибками, говоря, что существует несоответствие в размере, который отправляется в приложение который прослушивает сокет и закрывает сокет.python struct module (python 2.4)
Следующий снип - это то, чего я пытаюсь достичь. Похоже, что преобразование endianess/string, которое я в зависимости от отправки данных назад, неверно.
""" request struct
#structure i am sending over unix domain socket
struct prod_entry {
unsigned int Model;
unsigned int year;
char prodname[64];
}
"""
value = (1, 1992, "mustang")
Что я здесь делаю неправильно. Я хочу получить буферный пакет и отправить его снова.
prod_entry = struct.pack('I I 64s', *value)
def update(update_records):
try:
comm_sock = socket.socket(socket.AF_UNIX,socket.SOCK_STREAM)
except socket.error:
return
try:
comm_sock.connect(PROD_UNIX_DOMAIN_SKT)
except socket.gaierror:
return
try:
comm_sock.sendall(update_records)
except socket.error:
return
reply = comm_sock.recv(struct.calcsize('I I 64s '))
out1 = struct.unpack('<I I 64s',reply)
rebound = struct.pack('I I 64s', *out1)
comm_sock.sendall(rebound)
reply2 = comm_sock.recv(struct.calcsize('I I 64s '))
out2 = struct.unpack('<I I 64s',reply2)
comm_sock.close()
update(prod_entry)
Я получаю :: struct.error: распаковывать размер ул не соответствует формату
Да, вы правы, для recv мы указываем максимальный размер буфера, и он не равен тому, что я пытаюсь распаковать, и, следовательно, я получил эту ошибку. Я нашел это, напечатав размер буфера, возвращаемого recv, и соответствующим образом скорректировал формат моей распаковки. благодаря – Vijay