|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
[Python] Guida socket
Sapete dove posso trovare una buona guida ai socket in python? Quella sul sito non mi sembra tanto completa...
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Con tutte le librerie che ha Python per internet, a te interessa veramente manipolare direttamente i socket?
A cosa ti servirebbero?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Quali altre possibilità ho?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Tantissime. Python ha una libreria molto ricca per accedere a internet.
Fai prima dirmi cosa ti serve (anche perché tra poco dovrei uscire
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Dovrei semplicemente mettere in comunicazione più macchine e inviare e ricevere stringhe.
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Se è solo per quello allora forse è meglio che usi i socket.
Nel link, verso la fine, trovi diversi esempi di semplici comunicazioni fra macchine.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2516
|
Quote:
Credo anche in questo caso socket.. Ultima modifica di -Slash : 04-04-2009 alle 22:07. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Lo penso anch'io, ma già per trasferire i file mi verrebbe in mente di utilizzare il protocollo FTP.
Comunque sono tante idee un po' eterogenee: è difficile dare una risposta che indirizzi verso una ben precisa direzione / libreria. Ad esempio per quanto già scritto e soddisfare tutte le richieste si potrebbe pensare di mettere in piedi piccoli server HTTP, che in Python si tirano sù in pochi minuti. Ma potrebbe essere come sparare a una mosca con un cannone.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
C'è il framework twisted che ha moltissimi strumenti per poter sfruttare il network.
Come libro invece consiglio Foundations of Python Network Programming. Trovi l'e-book con una semplice ricerca con BigG. Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Io ho usato BasicSocketServer o qualcosa di simile.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Mai sentito.
Sarei curioso di vedere questo server HHTP fatto in pochi minuti. Pensi di poter postare il codice quando hai un pò di tempo?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non posso postare il codice, perché è roba aziendale. Alcuni spezzoni per rendere l'idea, sì:
Codice:
InternetUtils.RunHTTPServer(Host, Port, MyHTTPRequestHandler) Un esempio di handler per gestire le richieste è il seguente: Codice:
class MyHTTPRequestHandler(InternetUtils.AdvancedHTTPRequestHandler):
server_version = 'MyHTTP/0.01alpha'
default_content_type = 'text/plain'
log_file = r'D:\tmp\MyHTTP.log'
def EncodeContent(self, message):
return message
def _list(self, Globals = None, Locals = None, Self = None, Inspect = None, **Parameters):
if Globals is not None:
Datas = globals()
elif locals is not None:
Datas = locals()
elif Self is not None:
Datas = self.__dict__
elif Inspect is not None:
Datas = dir(self)
else:
Key, Datas = '', {}
return self.send_message(str(sorted(Datas)))
def _get(self, Globals = None, Locals = None, Self = None, Inspect = None, **Parameters):
if Globals:
Key, Datas = Globals, globals()
elif Locals:
Key, Datas = Locals, locals()
elif Self:
Key, Datas = Self, self.__dict__
else:
Key, Datas = '', {}
return self.send_message(str(Datas[Key]) if Key in Datas else 'ERROR! Data not found!!!')
Io devo definire soltanto le seguenti cose: la versione del server; il MIMEType del contenuto che eroga (ovviamente per singole precise richieste si può cambiare); Un file di log in cui riportare tutte le richieste arrivate (tipo il log di apache; ovviamente è opzionale). Il metodo EncodeContent esegue eventuali codifiche. In questo caso i dati restituiti sono testo "nudo e crudo", per cui semplicemente restituisce ciò che riceve. Fatto questo è sufficiente definire dei metodi che verranno automaticamente chiamati quando arriva una richiesta che li reclama. Qui ne sono definiti due, _list e _get. Il nome sembra strano con quegli underscore all'inizio, ma ciò è necessario perché quando la classe madre effettua il parsing dell'URI che è arrivata, sostuisce tutti gli / in _ in modo da poter mappare correttamente l'URI a un preciso metodo della classe. Quindi se tu richiami il server con questa URI: http://192.168.0.1/list?Globals=Yes verrà richiamato il metodo _list col parametro Globals valorizzato con la stringa 'Yes'. Qualunque richiesta per cui non esiste un metodo mappato viene dirottata nel metodo standard _bad, che provvede a visualizzare un messaggio d'errore standard.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#13 | ||||||
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
Quote:
Quote:
Quote:
In pratica aggiungi funzionalità alla classe dalla quale erediti. Quote:
Quote:
P.S: in quel link di esempio che hai scritto si è vista la valorizzazione del parametro Global, ma gli altri parametri in un URL come si potrebbero presentare? Con il semplice nome della variabile come Globals = Yes in questo caso? P.S2: ma quel _ prima del nome di un metodo o variabile non vuol dire che la rende privata?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. Ultima modifica di ~FullSyst3m~ : 05-04-2009 alle 19:07. |
||||||
|
|
|
|
|
#14 | ||||||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Datas = dir(self) #qua cosa mostri? Faccio introspezione sull'oggetto stesso, e recupero tutti i membri (variabili e metodi) esso contenuti. return self.send_message(str(sorted(Datas))) #dove è send_message? In qualche altra parte di codice? Si trova nella classe madre che gestisce le richieste HTTP, AdvancedHTTPRequestHandler. Key, Datas = Globals, globals() #questa funzione cosa fa? globals() ritorna un dizionario con l'elenco di tutte le variabili globali. Key, Datas = Locals, locals() #come sopra globals() ritorna un dizionario con l'elenco di tutte le variabili locali. Key, Datas = Self, self.__dict__ #dove lo prende questo dizionario? Ogni oggetto Python "non banale / standard" ha al suo interno un dizionario in cui sono riportate le variabili e i metodi d'istanza. In pratica tutte queste informazioni mi servono per controllare dall'esterno lo stato del server. Quote:
Quote:
Quote:
Quote:
Supponendo che il codice l'abbia salvato su un file che si chiama server.py, basta Codice:
python server.py Quote:
Quote:
http://192.168.0.1/list?Globals=Yes&Locals=Yes Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||||||
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
Riguardo il _ serve anche a rendere privata una funzione o variabile. O no?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:45.




















