[Python] Socket e lettura dati

Enrico 'Henryx' Bianchi henryx_b a yahoo.it
Sab 24 Mar 2012 14:47:37 CET


On Saturday, March 24, 2012 01:21:28 PM Enrico 'Henryx' Bianchi wrote:
> In teoria potrei 
> risolvere facendo il controllo della corretta lunghezza della stringa (if 
> (data[:2] == '["' or data[:3] == '[{"') and (data[-3:] == '}]\n')) ed
> inviare  al client un comando di notifica che, in caso negativo, reinvia il
> dato (sinceramente mi sembra un po' brutto, ma non vedo alternative)

Ok, direi di aver raggiunto un punto:

Lato client:
for item in res.get():
    while True:
        conn.send(item + "\n")
        result = conn.recv(8192)
        if json.loads(result)["result"] == "ok":
            break

Lato server:
while True:
    data = conn.makefile().readline()
    if not data:
        break

    if (data[:2] == '["' or data[:3] == '[{"') and (data[-3:] == '}]\n'):
        conn.send(json.dumps({"result": "ok"}))

        datajson = json.loads(data.decode("utf-8"))

        if type(datajson[0]) == dict:
            if datajson[0].values()[0]["attrs"]["type"] == "file":
                files.append(data)
            elif datajson[0].values()[0]["attrs"]["type"] == "directory":
                dirs.append(data)
        else:
            if datajson[1]["attrs"]["type"] == "file":
                files.append(data)
            elif datajson[1]["attrs"]["type"] == "directory":
                dirs.append(data)
    else:
        conn.send(json.dumps({"result": "ko"}))

La cosa, come ho detto, non mi piace molto in quanto mi sembra una forzatura, 
ma devo dire che funziona e quindi posso anche accontentarmi (c'e` da dire che 
dovrei aggiungere dei controlli in quanto rischio un loop infinito nella 
lettura dei dati, pero` per ora va bene)

Enrico
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        signature.asc
Tipo:        application/pgp-signature
Dimensione:  836 bytes
Descrizione: This is a digitally signed message part.
URL:         <http://lists.python.it/pipermail/python/attachments/20120324/5df3abbb/attachment.pgp>


Maggiori informazioni sulla lista Python