• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Creare/inizializzare un socket

gedamial

Utente Senior
Autore del topic
9 Giugno 2010
1.937
69
Miglior risposta
0
Salve.

Sto cercando ovunque un esempio di inizializzazione di un socket (in modo pratico), ma non lo trovo! Ho provato a creare diversi progetti in C e C++, copiando alcuni codici sul web per vedere se funzionavano (moment! che poi però avrei imparato!)... ma nulla. Da quel che vedo utilizzando Google, al 90% si trovano solo esempi per creare socket su Linux (ovviamente su Linux è più facile, si sapeva).

Prima di "cercare di passare alla parte pratica", ho naturalmente studiato la parte teorica dei socket e nell'esempio di un sistema client/server ho capito che


Server
  • creare un socket su una determinata porta
  • mettere il socket in ascolto
  • accettare le richieste del client

Client
  • tentare la connessione ad un server che risiede su una determinata porta

Questa è la parte teorica, ma io cercavo quella pratica! Mannaggia, non ne trovo una buona!
Ho persino chiesto aiuto in questo thread su un sito (non credo sia spam)
Perfavore, Entra oppure Registrati per vedere i Link!


Tutto quel che hanno fatto è rinfacciarmi di cercare meglio... ma grazie al cavolo!
Boh, non so che dire.

Chiedo aiuto a voi, nella speranza di fare luce a questa ombra di ignoranza O.o

Grazie in anticipo!
 
@HabboFanNumero1 da qual che ho capito t'interessa Winsock
ecco una guida dedicata che potrebbe aiutarti :
Perfavore, Entra oppure Registrati per vedere i Link!

La guida che mi hai linkato, come TUTTE le altre che ho trovato su Google, non fanno altro che postare codice errato. Dico io, se il codice funziona a lui (che lo ha postato) perché a me no? Mi escon fuori diversi errori, e ancora devo fare nulla! Ho solo creato un socket!

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

e gli errori son questi:

OjeY4Hi.png


Bah... ogni guida sempre la stessa storia...
 
Il codice è corretto ma tu devi saper leggere gli errori e i warning del compilatore !

Quella linea #pragma non c'è per caso. Il tuo compilatore (GCC) la ignora perché è specifica del compilatore Microsoft per cui è scritto il codice.

Quindi, o usi il compilatore Microsoft per cui è stato scritto quel codice, oppure indichi a GCC dove deve trovare la libreria ws2_32.lib (oppure ws2_32.a)

Quando si copia il codice, si deve sapere cosa si fa. Ecco perché io dico che copiare senza "studiare e capire" non va affatto bene ...
 
In effetti proprio adesso sono riuscito a creare un server seguendo una guida su Youtube linkando libws2_32.a al progetto.

Quando si copia il codice, si deve sapere cosa si fa. Ecco perché io dico che copiare senza "studiare e capire" non va affatto bene ...
Sono d'accordo con te. Ma non credo che io sia la persona adatta alla quale rivolgere questa frase. Sono una persona che non dorme la notte se non capisce una stupidissima stringa e finché non la capisce non osa andare avanti col progetto.

Siccome in rete le guide sui Socket lasciano parecchio a desiderare e di libri non ce ne sono (almeno non ne ho trovati) allora ho OSATO questa volta servirmi di un codice già pronto, che poi avrei COMUNQUE imparato per conto mio.
 
La frase è rivolta genericamente a tutti quelli che fanno come, in questo caso, hai fatto tu.

La programmazione si studia *prima* in teoria e sui libri (lascia stare guide e manuali su Internet) e *dopo* si fanno le prove con i codici.
 
La programmazione si studia *prima* in teoria e sui libri (lascia stare guide e manuali su Internet) e *dopo* si fanno le prove con i codici.

La teoria l'ho trovata su Internet e l'ho studiata. E' la pratica che viene a mancare su internet. Le guide su questi argomenti sono tutte basate su Linux
 
Scusa, non è per polemizzare, non mi interessa, ma se avessi studiato la teoria avresti anche compreso subito la questione del #pragma e cosa voleva dire e senza perdere tempo avresti ottenuto subito il tuo codice funzionante.
 
Scusa, non è per polemizzare, non mi interessa, ma se avessi studiato la teoria avresti anche compreso subito la questione del #pragma e cosa voleva dire e senza perdere tempo avresti ottenuto subito il tuo codice funzionante.

Non è questo il punto! Il punto è che mi ritrovo davanti questo scarafaggio:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

che non so decifrare! Non so spiegarmi! Dove trovo una guida che mi spieghi il significato di queste stringe passo passo?
Si, ok, ho creato il server e funziona. Ma non ho intenzione di andare oltre! Non creerò più nulla finché non comprenderò le stringe di questo server che ho creato seguendo la guida di uno su YouTube. Non mi serve a nulla fare il copia&incolla.

Posso chiederti dove hai studiato questi argomenti? Quale sito? Quale libro? Ti chiedo per favore di darmi quante più fonti riesci a darmi...
 
Chiamiamole "linee di codice" non "stringhe" ... è meglio quando si parla tra programmatori ...

Per imparare, cerca su google "Winsock libro" ... uno qualsiasi va bene (ovviamente (!) in inglese, se non conosci l'inglese, almeno per leggere dei testi tecnici, lascia stare la programmazione e dedicati ad altro ...).

Infine su MSDN Online trovi *tutta* (dico tutta) la documentazione riferita a quello che si usa in quel codice. Molti libri fanno riferimento a MSDN (giustamente) e quindi ti consiglio vivamente di consultarla.

Naturalmente dò per scontato che tu sappia le "basi", cosa è una struttura, cosa è un socket e così via ... altrimenti spiegare è un problema ...

Per il codice, a grandi linee ...

struttura e funzione usate per inizializzare il sottosistema Winsock (solo per Winsock di Microsoft); obbligatorio eseguire queste linee di codice ...

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!


creazione socket, uno per ascoltare le connessioni in arrivo, uno per connettersi a server remoti

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Per imparare, cerca su google "Winsock libro" ... uno qualsiasi va bene (ovviamente (!) in inglese, se non conosci l'inglese, almeno per leggere dei testi tecnici, lascia stare la programmazione e dedicati ad altro ...).

Scusa un secondo. Non ho ben capito. Allora io l'inglese lo conosco abbastanza da capire testi e quant'altro. Nel caso non lo avessi saputo, cosa avrei dovuto fare scusa? Lasciar perdere la programmazione? O.o sono anni e anni che convivo con la programmazione e dovrei dedicarmi ad altro? :emoji_relieved: scusa non capisco

Naturalmente dò per scontato che tu sappia le "basi", cosa è una struttura, cosa è un socket e così via ... altrimenti spiegare è un problema ...
Si, conosco le basi. Altrimenti, come ti ho detto, non avrei osato immaginare di voler assaggiare l'argomento dei sockets in modo pratico.
 
Non ho ben capito.

Sì, non hai ben capito. Ti ho detto che libri che trattano di Winsock ce ne sono a bizeffe (basta una ricerca, Amazon è piena), MA che è quasi necessario usare i libri in inglese (per tanti motivi) e SE non conosci l'inglese non puoi programmare. Dato che dici che l'inglese non è un problema ALLORA ti consiglio vivamente di scegliere un libro su Winsock in inglese (uno qualsiasi) e studiarlo. Ora è più chiaro ?


non avrei osato immaginare di voler assaggiare l'argomento dei sockets in modo pratico.

Bene, questa era una premessa necessaria. Quindi puoi leggere e capire tutto da solo ... ad esempio,

1) cosa è e a cosa serve la struttura WSAData ?
Spiegato in
Perfavore, Entra oppure Registrati per vedere i Link!


2) cosa è e a cosa serve la funzione socket ?
Spiegato in
Perfavore, Entra oppure Registrati per vedere i Link!

(meglio la funzione WSASocket in
Perfavore, Entra oppure Registrati per vedere i Link!


E così via in generale per Winsock 2, leggi
Perfavore, Entra oppure Registrati per vedere i Link!
 
  • Like
Reactions: 1 person
Sì, non hai ben capito. Ti ho detto che libri che trattano di Winsock ce ne sono a bizeffe (basta una ricerca, Amazon è piena), MA che è quasi necessario usare i libri in inglese (per tanti motivi) e SE non conosci l'inglese non puoi programmare. Dato che dici che l'inglese non è un problema ALLORA ti consiglio vivamente di scegliere un libro su Winsock in inglese (uno qualsiasi) e studiarlo. Ora è più chiaro ?
ORA ti sei espresso meglio. Prima mi hai fatto capire che, se non conosco l'inglese, devo lasciar perdere la programmazione



Bene, questa era una premessa necessaria. Quindi puoi leggere e capire tutto da solo ... ad esempio,

1) cosa è e a cosa serve la struttura WSAData ?
Spiegato in
Perfavore, Entra oppure Registrati per vedere i Link!


2) cosa è e a cosa serve la funzione socket ?
Spiegato in
Perfavore, Entra oppure Registrati per vedere i Link!

(meglio la funzione WSASocket in
Perfavore, Entra oppure Registrati per vedere i Link!


E così via in generale per Winsock 2, leggi
Perfavore, Entra oppure Registrati per vedere i Link!

Ho già letto questi articoli della MSDN, ma non ci ho capito molto. NON perché è inglese. Sai su quanti siti inglesi ho dovuto studiare!?
MSDN ha anche articoli italiani, quindi non è un problema di lingua. E' proprio il modo in cui lo spiega. Sono ignorante io, unica spiegazione.

Beh, detto questo non so più che pesci prendere.
Direi che il problema è risolto (si fa per dire :emoji_relieved:)

Aumento reputazione a @TBH e @nothing
Grazie per l'aiuto!
 
ORA ti sei espresso meglio. Prima mi hai fatto capire che, se non conosco l'inglese, devo lasciar perdere la programmazione

No, mi ero spiegato bene anche prima e confermo. Se non conosci l'inglese (tecnico, quello che ti comprende di capire testi e documentazione), la programmazione la puoi lasciar perdere. Lo confermo non solo per te ma in generale, è così che la penso. Ma hai detto che non è il tuo caso, quindi va bene.

MSDN ha anche articoli italiani

NO, quelli non li leggere perché le traduzioni (automatiche) sono abominevoli (per un periodo ho collaborato nel miglioramento di tali documentazioni in italiano con Microsoft, ma poi hanno scelto l'automatismo ... ).

E' proprio il modo in cui lo spiega.

Le spiega benissimo, non c'è altro modo ...

Sono ignorante io, unica spiegazione.

Forse la preparazione di base di cui ti parlavo e che dici di possedere non è proprio "completa" ...

Direi che il problema è risolto (si fa per dire :emoji_relieved:)

Beh, che ti posso dire ... prova a dire cosa non comprendi della prima pagina di MSDN e vediamo dove sono i problemi per te ...

Ciao
 
@HabboFanNumero1

va be a questo punto sposto tra i problemi risolti ^^ , comunque riguardo all'adozione di libri inglesi su argomenti specifici è un consiglio che ti do pur io ^^, Dato che le traduzione difficilmente vengono effettuate su libri che vengono venduti in meno. In ogni casi ci sono anche testi validi italiani che riguardo il C/C++ (anche se alle volte sono delle traduzioni )
 
@TBH @nothing

La mia ultima domanda è: se dovessi lasciar perdere i socket nell'ambito di autodidatta, dove andrò poi ad impararli? All'università? Ingegneria informatica?
 

Ma no ... non cercare scuse :-)


Beh, in qualsiasi posto te lo spieghi qualcuno (corso universitario, professionale ...) MA te lo spiegherà sempre in un certo modo e potrebbe essere sempre un modo che non comprendi ...

Sono invece certo che, con un po' più di concentrazione e impegno personale, riusciresti da solo, come ognuno di noi ... del resto l'argomento è abbastanza semplice ...

Ripeto ... cosa non capisci, ad esempio, della prima pagina ?
 
Ma no ... non cercare scuse :-)
Non cerco scuse :emoji_slight_smile:

Beh, in qualsiasi posto te lo spieghi qualcuno (corso universitario, professionale ...) MA te lo spiegherà sempre in un certo modo e potrebbe essere sempre un modo che non comprendi ...
NO, è diverso. Dinanzi ad un professore c'è un botta e risposta. Leggere una pagina di MSDN è ben diverso dal parlare faccia a faccia con qualcuno. Puoi fare 5 domande al secondo col codice davanti al pc... insomma cambia.

del resto l'argomento è abbastanza semplice ...
Pesce d'aprileee :emoji_relieved:

Ripeto ... cosa non capisci, ad esempio, della prima pagina ?

La prima pagina mi dice che WSAData è una struttura contenente diversi membri, e questo l'ho capito. Quello che non capisco è COME viene usata nel codice:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Cioè... boh
 
NO, è diverso. Dinanzi ad un professore c'è un botta e risposta. Leggere una pagina di MSDN è ben diverso dal parlare faccia a faccia con qualcuno. Puoi fare 5 domande al secondo col codice davanti al pc... insomma cambia.

Questo è vero ma potresti non capire neanche una delle 5 risposte ...

Quello che non capisco è COME viene usata nel codice:

1) Viene dichiarata una variabile di tipo struttuta WSAData

2) Viene creata una variabile di tipo WORD contenente un valore esadecimale 0x0201 (versione della libreria richiesta dal codice seguente, 2.1)

3) Viene chiamata la funzione WSAStartup a cui viene passata la variabile (con la versione di Winsock richiesta) e l'indirizzo della struttura che verrà riempita dalla funzione (viene riempito ogni elemento della struttura).

La funzione restituisce un codice di errore e dovrebbe essere usata così

int err = WSAStartup( Version, &wsa );

Se err è diverso da zero allora il sistema non trova una DLL di Winsock della versione richiesta utilizzabile. In caso contrario, la DLL viene caricata in memoria e nella struttura trovi le informazioni che ti servono per l'uso della stessa.