Domanda

Sto imparando la programmazione socket (in Python) e mi chiedevo quale sia il modo migliore / tipico di incapsulare i dati? I miei pacchetti verranno utilizzati per inviare comandi di esecuzione, arresto, configurazione, ecc. Sul lato ricevente. È utile usare JSON o solo testo semplice?

È stato utile?

Soluzione

Ti suggerisco di utilizzare un formato fisso o prevalentemente fisso, in quanto ciò semplifica le cose.
Usando quindi funzionalità come la struct.Struct della libreria standard, con i suoi metodi pack () e umpack (), o forse un pacakges leggermente più caratterizzato come Costruisci , dovresti svolgere gran parte del lavoro di analisi per te ;-)

Altri suggerimenti

Suggerisco di iniziare con il testo semplice: è più facile eseguire il debug. Il formato che assume il tuo testo dipende da cosa stai facendo, da quanti comandi, argomenti, ecc. Hai capito come appariranno i tuoi comandi? Una volta capito come appare, probabilmente suggerirà un formato tutto da solo.

Stai usando TCP o UDP? TCP è facile poiché è uno stream, ma se stai usando UDP tieni a mente la dimensione massima dei pacchetti UDP e quindi quanto può essere grande il tuo messaggio.

Se stai sviluppando qualcosa come un esercizio di apprendimento, potresti trovare la soluzione migliore per un formato di testo strutturato (cioè leggibile e scrivibile dall'uomo).

Un esempio potrebbe essere l'uso di un numero fisso di campi per comando, campi di testo a larghezza fissa e / o delimitatori di campi facilmente analizzabili.

Generalmente il testo è meno efficiente in termini di dimensioni del pacchetto, ma ha i vantaggi di poterlo leggere facilmente se si esegue un'acquisizione di pacchetti (ad es. utilizzando WireShark) o se si desidera utilizzare Telnet per simulare un client.

E se questo è solo un esercizio di apprendimento, la facilità di debug è un problema significativo.

Dai un'occhiata a come scapy (una fantastica libreria di manipolazione di pacchetti Python) lo implementa. Sembra che abbiano una manciata di campi .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top