Il server è scritto in Java ed è remoto.
Il codice che esegue per ricevere una stringa, una variabile intera, ed variabile una in virgola mobile è il seguente:
DataInputStream rx = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
System.out.println(rx.readLine());
System.out.println(rx.readInt());
System.out.println(rx.readFloat());
Ho risolto il problema utilizzando "struct.pack", solamente non mi è chiaro una cosa:
data2 = struct.pack('!i', 3) # integer -> bytes
mi invia una variabile di tipo intero;
data3 = struct.pack('!f', 3.14) # float -> bytes
mi invia una variabile di tipo float;
Per inviare una stringa, invece, ho trovato diversi modi, riportati qui sotto:
data1="Hello World!\n"
#1:
packed = data1.encode()
#2:
packed = bytes('Hello World!\n','utf-8')
#3:
packed = struct.pack('13s', data1.encode('UTF-8'))
Funzionano tutti e tre, ma qual'è la differenza?
Inoltre ho questo errore qui: Se volessi utilizzare la soluzione 3, utilizzando però "len" per contare la lunghezza della stringa, invece di mettere il valore a mano, in questo modo:
packed = struct.pack('len(data1)s', data1)
mi restituisce il seguente errore:
packed = struct.pack('len(data1)s', data1.encode('UTF-8'))
struct.error: bad char in struct format
Come mai? non posso utilizzare len all'interno di quella istruzione?