Finalizzando ad una idea, mi sto guardando il trasferimento di files per vedere come trasferirne i metodi nell'ambito di un sistema integrante anche altro genere di comunicazione (essenzialmente testuale).
Sulla scorta di esempi nella docs ed in rete lo scambio "puro" dei file mi è riuscito agevolmente ma andando a verificare in uno scambio dati "misto" mi è apparso chiaro che ci ho capito ben poco (sono ignorantissimo in inglese), dai test effettuati credo proprio che i miei problemi derivino dalla gestione del buffer di comunicazione, come sembra evidente dall'output client sotto (in calce al post metto il codice)
Codice: Seleziona tutto
@nzp:~/test/skt/cli$ python3 cli_02.py
Aperto file per registrazione dati
Ricezione dati ...
data = b'1 2 3 4 5 6 7 8 9 10\n\\x0Grazie per la vostra visita'
1 2 3 4 5 6 7 8 9 10
\x0Grazie per la vostra visita
Ricezione dati ...
data = b''
File ricevuto con successo
Messaggio dal server :
Connessione chiusa
Codice: Seleziona tutto
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7
Ricezione dati ...
data = b' 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n1 2 3 4 5 6 7 8 9 10\n\\x0Grazie per la vostra visita'
8 9 10
....
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
\x0Grazie per la vostra visita
Ricezione dati ...
data = b''
File ricevuto con successo
Messaggio dal server :
Connessione chiusa
È da un po' che cerco di capire coerentemente come funziona il buffer di scrittura/lettura tra socket ma l'unica cosa che ho appreso è che ci ho capito ben poco e che mi manca la funzione "flush()" usata con altri linguaggi (esiste per python?)
Ho in mente metodi diversi da testare ma sarebbe enormemente gradita una mano in proposito (e anche info su eventuali possibili problemi di codifica numerica tra sistemi diversi).
Graie per l'attenzione, il codice in corso :
server
Codice: Seleziona tutto
# _*_ coding: utf-8 _*_
# utilizzare python 3
import socket # importa il modulo socket
porta = 7679 # definisce la porta di ascolto
s = socket.socket() # crea il socket
host = socket.gethostname() # rileva la macchina locale
s.bind((host, porta)) # inizializza la porta
s.listen(5) # si pone in ascolto
print('Server in ascolto...')
while True:
conn, ind = s.accept() # stabilisce la connessione
print('Stabilita connessione con', ind)
data = conn.recv(1024) # riceve il saluto dal client
print('Ricevuto : ', data.decode('utf-8'))
filename = 'mytext.txt'
f = open(filename, 'rb')
l = f.read(1024)
while (l):
conn.send(l)
print('Trasmesso : ', repr(l))
l = f.read(1024)
f.close()
conn.send(b'\\x0')
print('Fine trasmissione')
conn.send('Grazie per la vostra visita'.encode('utf-8'))
conn.close()Codice: Seleziona tutto
# _*_ coding: utf-8 _*_
# utilizzare python 3
import socket # importa il modulo socket
porta = 7679 # definisce la porta di ascolto
s = socket.socket() # crea il socket
host = socket.gethostname() # rileva la macchina locale
s.connect((host, porta)) # tenta la connessione
s.send('Ciao server!'.encode('utf-8')) # invia un saluto
with open('file_ricevuto_02', 'wb') as f:
print('Aperto file per registrazione dati')
while True:
print('Ricezione dati ...')
data = s.recv(1024)
print('data = %s' % (data))
if data.decode('utf-8') == '\\x0':
break
elif not data:
break
else:
print(data.decode('utf8'))
# scrive i dati nel file
f.write(data)
data = []
f.close()
print('File ricevuto con successo')
data = s.recv(1024)
print('Messaggio dal server : ', data.decode('utf-8'))
s.close()
print('Connessione chiusa')