Forum >> Principianti >> Utilizzo Socket

Pagina: Indietro 1 2 3 4 5

L'intestazione con il FROM TO LEN a livello pratico delle nostre necessità non riveste alcuna importanza
... C'è quel "nostre" che mi preoccupa un po' ...
Il nostre era riferito alla mia combriccola che utilizzerà il Terminale ;) :)

La finestra rispetterà i ritorni a capo solo (e soltanto) se riceverà una stringa codificata quale utf-8, i singoli caratteri"\" e "n", passati come tali non verranno interpretati come new-line ... in pratica, dovresti decodificare l'insieme di bytes da passare alla finestra come 'utf-8'

msg = ['RECEIVED', data[86:-3].decode(encoding="UTF-8", errors="ignore")]

Questo è quello che c'è scritto

Veniamo ora ai punti di cui Ti volevo avvertire :

Dammi il tempo di leggere e tentare di capire

Comunque lo ho fatto "girare" per più di 10 ore continuative in ricezione sull'APRS

E lì viene giù di tutto in quanto a stramberie di caratteri; è lì che mi sono accorto di qualche problema ed ho aggiunto l'ignore di cui sopra



Ciao e grazie




PS : :) :) :) IO ho problema dei ritorni a capo; l'editor di questo Forum ne aggiunge a manetta







--- Ultima modifica di Pietro Bruno Lancerotto in data 2024-02-28 16:25:15 ---
--
Bruno L.
Veniamo ora ai punti di cui Ti volevo avvertire :

1 - in utility.Delivery vi sono diverse istruzioni "raise RuntimeError ...." esse stanno li perché dovrebbero essere intercettate e gestite, altrimenti emetteranno un traceback in una eventuale shell di avvio, ovviamente quando lo ho manipolato non ho "gonfiato" il codice con la gestione degli errori, pensaci ... al minimo trasforma i "raise" in "return"
Torno a farmi vivo; sono stato un po' occupato ( visite, esami, i 75 si fanno sentire :()

La parte 2 ho sistemato tutto come suggerito

Per quanto riguarda la parte 1 che riporto nel quoting, sono andato a leggere un po'.

In primis ho cercato una traduzione del vocabolo; trovato una mezza enciclopedia sui suoi possibili significati in lingua italiana. :)

Decidero se tenere aperta la console; sicuramente lo farò in fase iniziale giusto per vedere se ogni tanto appare qualcosa.





Ho fatto alcune aggiunte.

f = open("Terminale.ini", "r")
serverName = (f.readline()).strip("\n")
serverPort = int(f.readline())
f.close()
Ho aggiunto un file minimalista per poter cambiare IP; mi serve provare da remoto perchè non sempre ho qualcuno che mi faccia da sponda e quindi metto in funzione il tutto sull'IP settato nel router come da mie messaggi precedenti.




Ho poi intercettato i caratteri "strani" che inceppavano il sistema.

# Sostituzione caratteri accentati
TDT = TDT.replace("ò", "o'")
TDT = TDT.replace("à", "a'")
TDT = TDT.replace("ù", "u'")
TDT = TDT.replace("ì", "i'")
characters = "éè"
for x in range(2):
TDT = TDT.replace(charactersx, "e'")
characters = "£ç°§"
for x in range(4):
TDT = TDT.replace(charactersx, "_")





Perché l'abitudine è di scrivere in una certa maniera ed anche se ti dicono di evitare poi scappa lo stesso




Il sistema funziona; abbiamo provato per un paio d'ore in condizioni reali e la "banda bassotti" si è dichiarata più che contenta ed invia i ringraziamenti per il fondamentale aiuto




Comunque, thread e socket sono bestioline complicate ed approfondite, così come la strutturazione del codice ... hai ricevuto la mia email di risposta? Se ritieni posso inviarti una maccheronica traduzione (fatta da me e non pubblicabile) di un tutorial sui thread che ho trovato "buono" come spunto per approfondire l'argomento.


Si si ricevuta

Ti rispondo di là




Grazie ancora




--
Bruno L.
Pietro Bruno Lancerotto said @ 2024-03-04 16:26:19:
Veniamo ora ai punti di cui Ti volevo avvertire :

1 - in utility.Delivery vi sono diverse istruzioni "raise RuntimeError ...." esse stanno li perché dovrebbero essere intercettate e gestite, altrimenti emetteranno un traceback in una eventuale shell di avvio, ovviamente quando lo ho manipolato non ho "gonfiato" il codice con la gestione degli errori, pensaci ... al minimo trasforma i "raise" in "return"
...
In primis ho cercato una traduzione del vocabolo; trovato una mezza enciclopedia sui suoi possibili significati in lingua italiana. :)
Le istruzioni

raise RuntimeError('Gruppo %s non registrato' % group)
della classe utility.Delivery scatenano un errore di run-time, tale errore "dovrebbe" essere intercetato e gestito (ovviamente nella GUI) ma la faccenda richiederebbe tutta una serie di accorgimenti, comunque Ti suggerirei la lettura del capitolo 8 del tutorial, è un capitolo molto importante e significativo e "racconta" ciò che volevo indicare.

Comunque, Ti suggerivo di sostituire tae genere di istruzione con un semplice "return" ... praticamente di non far nulla per quelle condizioni di errore.





Riguardo al punto 2, per caso hai implementato "anche" quel "self.sok.settimeout(0.1)" che ho indicato come "soluzione di emergenza" per il daemon che rimarrebbe appeso?

Nel caso Tu lo abbia fatto, testa bene il punto, può comportare perdita di dati, un decimo di secondo è decisamente ingeneroso, utilizzato per test, una soluzione coerente sarebbe mooolto più laboriosa. Ho sollevato l'argomento principalmente per indicarTi che c'erano altre problematiche da vedere, circa i socket, che non è agevole trattare in un post.



Pietro Bruno Lancerotto said @ 2024-03-04 16:26:19:
Il sistema funziona; abbiamo provato per un paio d'ore in condizioni reali e la "banda bassotti" si è dichiarata più che contenta ed invia i ringraziamenti per il fondamentale aiuto

Se mi è riuscito di essere utile ne sono contento ... comunque, testatelo bene il Vostro terminale.

Ciao :)


Fatti non foste a viver come bruti...


Pagina: Indietro 1 2 3 4 5



Esegui il login per scrivere una risposta.