Найти - Пользователи
Полная версия: zlib+socket
Начало » Python для новичков » zlib+socket
1
sib_konst
есть (бОльшая часть кода вырезана, ибо много его, а проблема именно тут):
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()
то всё работает нормально.
Подскажите, что я делаю не так?
PooH
sib_konst
Подскажите, что я делаю не так?
Пытаетесь рассжать кусок файла в 1024 байта. Вам сначала надо его весь получить куда нибудь в промежуточный буфер, а уж потом тогой.

ЗЫ: А еще очень порадовал ваш стиль работы с XML: лихо так 8 с лишком метров в атрибут единственного элемента бац! Вот скажите зачем вам там XML? Чтоб было?
sib_konst
спасибо, пошёл экспериментировать =)
sib_konst
заменил:
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)
всё работает. Ещё раз спасибо за пинок в верном направлении =)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB