Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 8, 2009 12:28:48

sib_konst
От:
Зарегистрирован: 2009-10-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

zlib+socket

есть (бОльшая часть кода вырезана, ибо много его, а проблема именно тут):
server.py

import sys, socket, zlib, lxml, hashlib
import xml.etree.ElementTree as etree

tmpfile=sys.argv[2]
host=sys.argv[3]
port=int(sys.argv[4])

def mdhashing(instring):
m=hashlib.md5()
m.update(instring)
hashed=etree.Element("hashed",mdhash=m.digest())
return(etree.tostring(hashed))

def compressing(instring):
comptext=zlib.compress(instring,5)
return (comptext)
...
def fromfile(tmpfile):
f=open(tmpfile, "rb")#тут текстовик на 8 с копейками метров с данными формата: int:int!hex:int,hex:int:hex:int
h=f.read()
p=etree.Element("p", px=str(h))
restree=etree.tostring(p)
f.close()
return(restree+mdhashing(restree))

a=compressing(fromfile(tmpfile))
srv=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srv.bind((host,port))
srv.listen(1)
sock,addr=srv.accept()
sock.send(a,1024)
sock.close()
client.py
import socket, zlib, sys
from BeautifulSoup import BeautifulStoneSoup

host=sys.argv[2]
port=int(sys.argv[3])

def decompressing (instring):
decomp=zlib.decompress(instring)
return(decomp)

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host,port))
result1=sock.recv(1024)
result=decompress(result1)
tree=BeautifulStoneSoup(result)
print tree.prettify()
при исполнении на стороне клиента вылетает ошибка: zlib.error: Error -5 while decompressing data
если запустить код:
import zlib
f=open("tmpfile", 'rb')
string=f.read()
cstring=zlib.compress(string)
dcstring=zlib.decompress(cstring)
print dcstring
f.close()
то всё работает нормально.
Подскажите, что я делаю не так?



Офлайн

#2 Окт. 8, 2009 13:55:58

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

zlib+socket

sib_konst
Подскажите, что я делаю не так?
Пытаетесь рассжать кусок файла в 1024 байта. Вам сначала надо его весь получить куда нибудь в промежуточный буфер, а уж потом тогой.

ЗЫ: А еще очень порадовал ваш стиль работы с XML: лихо так 8 с лишком метров в атрибут единственного элемента бац! Вот скажите зачем вам там XML? Чтоб было?



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Окт. 8, 2009 14:02:03)

Офлайн

#3 Окт. 8, 2009 13:59:37

sib_konst
От:
Зарегистрирован: 2009-10-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

zlib+socket

спасибо, пошёл экспериментировать =)



Офлайн

#4 Окт. 8, 2009 15:31:01

sib_konst
От:
Зарегистрирован: 2009-10-08
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

zlib+socket

заменил:
server.py

sock.send(a,1024)
на
chunk=1024
i=0
ok=""
while i<len(a):
to_send=a[i:i+chunk]
sock.send(to_send)
ok=sock.recv(1024)
i=i+chunk
sock.send("fin")
client.py
result1=sock.recv(1024)
на
result1=sock.recv(1024)
result2=""
while result1!="fin":
result2=result2+result1
sock.send("ok")
result1=sock.recv(1024)
всё работает. Ещё раз спасибо за пинок в верном направлении =)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version