Problema risolto [Fastweb] Aprire porte TCP

E scusa dov'è il problema ? E' ovvio che l'applicazione di chiude...cosa vuoi che accada ?

Si ma dice che la connessione è stata effettuata senza che nessuno si connetta!!! Io non ho neanche aperto il cmd per testare la connessione!

Nessuno si connette al mio server, eppure dice di si!
 
Si ma dice che la connessione è stata effettuata senza che nessuno si connetta!!! Io non ho neanche aperto il cmd per testare la connessione!

La connessione non è stata effettuata, il programma si mette in ascolto ma si chiude immediatamente perché hai messo il break e la getch() viene trascurata perché si trova nel ciclo for, se invece l'avessi messa al di fuori il programma ti farebbe visualizzare l'output, idem per il cin.get() e il return 0.

Nessuno si connette al mio server, eppure dice di si!

Te lo dice la printf, volendo nella printf puoi scrivere "Piovono conigli", sta di fatto che quando il server si mette in ascolto correttamente viene eseguita la printf - qualunque sia il suo contenuto -. In sostanza : studia come creare un server in C e solo dopo, conoscendo le istruzioni, potrai fare tutti i test che vuoi.

NB: studiare i socket in C prevede una buona conoscenza del linguaggio, se non la possiedi devi partire dalle basi. Non devi "provare" a capire, devi capire partendo dalle basi per arrivare ad argomenti del genere. Comunque questo sorgente lo hai scritto tu o lo hai trovato su internet ?
 
NB: studiare i socket in C prevede una buona conoscenza del linguaggio, se non la possiedi devi partire dalle basi. Non devi "provare" a capire, devi capire partendo dalle basi per arrivare ad argomenti del genere. Comunque questo sorgente lo hai scritto tu o lo hai trovato su internet ?

Io ho scritto solo questa parte del codice, essendo l'unica che ho imparato:

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

Il resto non l'ho capito...

Comunque secondo me il C di base è una cosa e queste funzioni sono un'altra. Perché io ho studiato il C da un libro e anche online, ho studiato tutte le basi. Ora, con i socket, c'è un nuovo header file e di conseguenza nuovi metodi che non conosco.

Comunque.

La connessione non è stata effettuata, il programma si mette in ascolto ma si chiude immediatamente perché hai messo il break e la getch() viene trascurata perché si trova nel ciclo for, se invece l'avessi messa al di fuori il programma ti farebbe visualizzare l'output, idem per il cin.get() e il return 0.

Si, il fatto che si chiude l'ho risolto. Ma rimane il fatto che il messaggio di connessione avvenuta esce fuori SOLO se il server accetta una connessione. Dato che non accetta un bel cavolo, manda lo stesso il messaggio. E' quello il problema :emoji_relieved:
 
Si, il fatto che si chiude l'ho risolto. Ma rimane il fatto che il messaggio di connessione avvenuta esce fuori SOLO se il server accetta una connessione. Dato che non accetta un bel cavolo, manda lo stesso il messaggio. E' quello il problema :emoji_relieved:

Il sorgente è incompleto e mal gestito a livello di errori che potrebbero verificarsi. Ti spiego il tassello che ti manca per capire :

if(Connect = accept(Listen, (SOCKADDR*)&Server, &size)) : con l'istruzione accept restituisci un valore di tipo SOCKET che corrisponde al descrittore del nuovo socket creato. In parole povere quella if può essere tradotta : se l'operazione svolta da accept() è andata a buon fine. Nel corpo della if c'è la famosa printf...la visualizzi perché accept() non ha restituito nessun errore non perché è stata creata una connessione, la connessione si crea quando una volta accettate le connessioni in entrata - finora il tuo programma si ferma qui - le elabora in base a quello che deve fare il server. In questo momento questo programma accetta le connessioni, nel caso in cui vanno a buon fine visualizza la printf e si chiude. Non hai implementato la gestione dei dati in arrivo - dunque di una connessione, perché quando avviene una connessione si inizia lo scambio di dati, il primo scambio di dati sono i pacchetti che contengono tutte le informazioni necessarie affinché la connessione venga effettuata correttamente -.
 
Il sorgente è incompleto e mal gestito a livello di errori che potrebbero verificarsi. Ti spiego il tassello che ti manca per capire :

if(Connect = accept(Listen, (SOCKADDR*)&Server, &size)) : con l'istruzione accept restituisci un valore di tipo SOCKET che corrisponde al descrittore del nuovo socket creato. In parole povere quella if può essere tradotta : se l'operazione svolta da accept() è andata a buon fine. Nel corpo della if c'è la famosa printf...la visualizzi perché accept() non ha restituito nessun errore non perché è stata creata una connessione, la connessione si crea quando una volta accettate le connessioni in entrata - finora il tuo programma si ferma qui - le elabora in base a quello che deve fare il server. In questo momento questo programma accetta le connessioni, nel caso in cui vanno a buon fine visualizza la printf e si chiude. Non hai implementato la gestione dei dati in arrivo - dunque di una connessione, perché quando avviene una connessione si inizia lo scambio di dati, il primo scambio di dati sono i pacchetti che contengono tutte le informazioni necessarie affinché la connessione venga effettuata correttamente -.

Ti ringrazio per la spiegazione. Ad ogni modo, passiamo avanti e spostiamo dal C++ al C :emoji_relieved:

Ho un'altro prototipo/modellino di creazione socket, questa volta in C

"Ma che cazz combini"

Eh lo so, le sto provando proprio tutte per avere la soddisfazione di creare un applicazione client/server. Ho addirittura provato in Python e in questo preciso istante sto seguendo guida di uno bravo su YouTube per crearla in C# (win forms) :ahah:

Allora, in C sembra funzionare. Mi faresti il favore di scrivere la seguente linea di comando sul CMD?

telnet 192.168.1.67 100

Se ti connette riceverai un piccolo messaggio ;)
 
Ti ringrazio per la spiegazione. Ad ogni modo, passiamo avanti e spostiamo dal C++ al C :emoji_relieved:

Ho un'altro prototipo/modellino di creazione socket, questa volta in C

"Ma che cazz combini"

Eh lo so, le sto provando proprio tutte per avere la soddisfazione di creare un applicazione client/server. Ho addirittura provato in Python e in questo preciso istante sto seguendo guida di uno bravo su YouTube per crearla in C# (win forms) :ahah:

NON E' COSI' CHE SI PROGRAMMA!

Allora, in C sembra funzionare. Mi faresti il favore di scrivere la seguente linea di comando sul CMD?

telnet 192.168.1.67 100

Se ti connette riceverai un piccolo messaggio ;)

Ovviamente non mi si connetterà perché 192.168.x.x è un IP locale, non ha a che fare con internet. Dovresti studiarle queste cose.
 
NON E' COSI' CHE SI PROGRAMMA!
E madonna santa lo so che non si fa così ma su internet dei socket non ci capisco na beata perciò cerco un linguaggio dove sia più facile apprenderlo. NON CI SONO MANCO LIBRI. Mica so come te che sei il figlio di Bill Gates.

Ovviamente non mi si connetterà perché 192.168.x.x è un IP locale, non ha a che fare con internet. Dovresti studiarle queste cose.
Yes, ma se metto quello preso da mioip.it mi dice:
Perfavore, Entra oppure Registrati per vedere i Link!
 
E madonna santa lo so che non si fa così ma su internet dei socket non ci capisco na beata perciò cerco un linguaggio dove sia più facile apprenderlo. NON CI SONO MANCO LIBRI. Mica so come te che sei il figlio di Bill Gates.

Se avessi più esperienza e ci perdessi più tempo capiresti, tutto si capisce. Apri una discussione in cui chiedi spiegazioni su quello che non capisci, sarò il primo a risponderti.

Yes, ma se metto quello preso da mioip.it mi dice:
Perfavore, Entra oppure Registrati per vedere i Link!

Perfavore, Entra oppure Registrati per vedere i Link!
 
@System32 su internet dice

A Socket Error 10049 condition on your computer typically occurs when you attempt to connect to an invalid Internet address while using Windows Sockets 2.

Partendo dal codice:

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

Su internet non trovo come fixare l'errore...
 
Ultima modifica:
Prova ad utilizzare inet_pton() come suggerito nel link che ti ho fornito e fai il debug con l'intellitrace ( premendo F11 ) per vedere se le variabili sono settate correttamente.
 
Prova ad utilizzare inet_pton() come suggerito nel link che ti ho fornito e fai il debug con l'intellitrace ( premendo F11 ) per vedere se le variabili sono settate correttamente.

Non posso fare nessuna delle due cose dato che a me è C non C# e come IDE uso CodeBlocks D:
 
Se lo metto nel codice sorgente mi da errore

Perfavore, Entra oppure Registrati per vedere i Link!


Mi credi? Non so che fare... scrivi su Google Client/Server Example in C on Windows. Quanti sono? Otto milioni di risultati? Visitati tutti :|

Ma una maledetta ricerca non la sai fare ? Appena trovi un intoppo ti fermi ? Mah
Perfavore, Entra oppure Registrati per vedere i Link!