|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
[C++]Qt creator - Programmazione di rete a basso livello
Da un paio di giorni mi sto interfacciando con Qt creator e il C++.
La scelta dell'ambiente di sviluppo mi è stata consigliata caldamente ![]() Ho quasi completato il tutorial introduttivo, quello per la rubrica per chi l'avesse utilizzato... L'ambiente è sicuramente molto funzionale. Ottimo direi, molto semplice da apprendere. Il fatto delle librerie indipendenti dall'architettura mi ha fatto sorgere alcune domande e incuriosito allo stesso tempo. Se non ho capito male, i programmi prodotti girano su piattaforme quali Linux e Windows senza ricompilazioni, direttive pragma e quant'altro? La seconda domanda volge sulla programmazione di rete, ho visto le relative classi disponibili e addirittura dedicate al livello applicazione come QFtp per esempio.. Librerie a basso livello ce ne sono? (Ad esempio mi occorerebbe utilizzare libpcap o Winpcap.... ma queste non sono riprodotte da Qt se non mi sbaglio.... devono essere incluse in qualche modo? Questo mi ridurrebbe la portabilità? Vi ringrazio per le risposte ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
Bhe il minimo indispensabile è la ricompilazione, cambiando architettura.
Per quanto riguarda librerie esterne con libpcap non avresti grossi problemi visto che esiste sia sotto windows che linux.
__________________
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
quindi a quanto ho capito, non perdo la portabilità del codice?
e mi basterebbe includere pcap.h e linkare il .file .o, giusto? Quindi sono libero di crearci una classe? Il punto è che Qt ancora non lo conosco bene e non so se consente di farlo senza problemi. grazie. |
![]() |
![]() |
![]() |
#5 | ||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
La portabilità dipende da come gestisci il progetto. Ovviamente dato che devi compilare una versione per ogni sistema operativo puoi usare LoadLibrary/dlopen gestiti tramite preprocessore per caricare dinamicamente le librerie di interesse. Se le librerie espongono una differente interfaccia ti ci vuole un Facade per ricondurle ad una interfaccia comune, in ogni caso un facade ti ci vorrà per la mappatura dei metodi caricati tramite GetProcAddress/dlsym. L'alternativa è usare il link statico, quello che cambia è che non devi gestire il caricamento dinamico della libreria con relativa mappatura dei metodi. Rimane sempre la necessità della classe Facade che tramite il preprocessore richiama i metodi della libreria corretta per ogni sistema operativo su cui verrà compilata. |
||
![]() |
![]() |
![]() |
#6 | ||
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#7 | ||
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Ho capito.
Secondo te avrei problemi a realizzare una classe con pcap per poi poterla utilizzare in modo adeguato assieme alle altre classi di Qt? Io quel che farei così adesso che ci penso è utilizzare le pragma direttive del tipo: Codice:
#if defined(WIN32) #define <WinPcap.h> #define <bpf.h> //di questo non sono sicuro #else /* UNIX */ #define <pcap.h> #define <bpf.h> più la ricompilazione... però ora che stò cercando in rete, sembrerebbe già esistano classi costruite con libpcap. http://analyzer.polito.it/docs/inter...s.htm#_details ma queste che vi ho linkato, mi sembra non siano portabili su linux... scusate ma le classi me le sono studiate, ma ancora non le stò utilizzando.... pertanto non ne ho esperienza. Grazie mille. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quella è stata creata per le wxWidgewts. Un altro framework multipiattaforma. Comunque la potresti adattare sostituendo le wxString con le QString e aggiungendo dove serve la compatibilità con Windows.
La direttiva standard dovrebbe essere #ifdef senza le parentesi. PS: mi sa che ci sarebbe molto da modificare, perché va a scrivere direttamente su un wxFrame, mi sembra creato in maniera un po' assurda quel componente. Ultima modifica di cionci : 12-12-2009 alle 07:29. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Ok, grazie.
a questo punto ho deciso di costruirne una da capo. Così servirà anche da esercizio. Se ho problemi posto naturalmente. ![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Scusate, una cosa.
Cosa mi conviene fare? creo un nuovo progetto e inserisco sia la classe chi il codice del programma o creo la classe separatamente? Inoltre mi sarebbe sufficiente includere i sorgenti di libpcap, o vi è una procedura per aggiungere librerie esterne? Grazie! |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
Quote:
LIBS += -L/path_headers_libpcap -lpcap
__________________
![]() |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Su Windows devi solo scompattare l'archivio.
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Già infatti
![]() Ora sto tentando di crearmi la famosa classe seppur le pcap abbiano già una buona interfaccia per utilizzarle... ma come detto, per iniziare va bene. Ora, siccome le funzioni di libreria accettano stringhe char, io sono comuque costretto ad utilizzare il tipo char e non QString corretto? Un'altra cosa... la classe la sto generando direttamente dentro il progetto, però mi chiedo se sarebbe meglio crearla separatamente. Vi ringrazio. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:42.