problema di connessione con socket TCP

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
4other
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 421
Iscrizione: venerdì 12 ottobre 2007, 9:01

Re: problema di connessione con socket TCP

Messaggio da 4other »

si nelo stesso file ho un if ke mi permette di scegliere qutomaticamente quale utente sono....
4other
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 421
Iscrizione: venerdì 12 ottobre 2007, 9:01

Re: problema di connessione con socket TCP

Messaggio da 4other »

non rieso proprio ad uscirne
Avatar utente
Balim
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 288
Iscrizione: martedì 19 febbraio 2008, 17:50

Re: problema di connessione con socket TCP

Messaggio da Balim »

Penso di aver capito il problema...quando puoi mandami il file sorgente al mio indirizzo email e poi ti rispondo qui sul forum ;)
4other
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 421
Iscrizione: venerdì 12 ottobre 2007, 9:01

Re: problema di connessione con socket TCP

Messaggio da 4other »

ok scusa non volevo essere invadente!!!
4other
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 421
Iscrizione: venerdì 12 ottobre 2007, 9:01

Re: problema di connessione con socket TCP

Messaggio da 4other »

te l'ho appena mandata!
Avatar utente
Balim
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 288
Iscrizione: martedì 19 febbraio 2008, 17:50

Re: problema di connessione con socket TCP

Messaggio da Balim »

Allora caro amico mio, partiamo dal presupposto che usare connect() su di una socket "inesistente" perchè non ancora "aggangiata" attraverso il bind() (vedi la nota [1] sul codice) è qualcosa di assolutamente scorretto quindi ti consiglio di trovare un altro modo per discriminare quale utente sia attivo ;)

Partiamo con il debug...

UTENTE 1 ---
Creo le tre socket, provo a connettermi alla prima (porta 5000), ovviamente non ci riesco perchè non c'è nessuno in ascolto ed entro nel primo if.
Mi metto in ascolto sulle porte 5000 e 5002 facendo il bind() e aspetto.

UTENTE 2 ---
Creo le tre socket, stavolta c'è qualcuno in ascolto sulla porta 5000 e quindi non entro nel primo if.
Entro nel ramo else if perchè non c'è ancora nessuno in ascolto sulla porta 5001.
Mi metto in ascolto sulla porta 5001 facendo il bind() e aspetto.
INTANTO -> Utente1 si accorge che qualcuno si è connesso sulla porta 5000 e lo notifica.

UTENTE 3 ---
Creo le tre socket.
A questo punto occorre una precisazione: il secondo argomento del "metodo" listen() (vedi nota [2]) è un intero che sta ad indicare il numero massimo orientativo di connessioni pendenti che possono essere tenute in piedi dal kernel in attesa che il programma le serva, NON quanti client possono connettersi su quella porta attraverso una socket. Se questo numero fosse zero, Utente3 entrerebbe nel primo if identificandosi come Utente1! (sempre ammesso che il kernel "accetti" zero come argomento)
Nel tuo caso Utente3 riesce a connettersi alla porta 5000 (if) pur restando in attesa e alla porta 5001 (else if) perchè libera. Entro nel ramo else.
Provo a connettermi di nuovo alla porta 5001 usando lo stesso descrittore di socket (con5k1_s) utilizzato poco sopra nel controllo else if e a questo punto esco stampando quell'errore. (vedi nota [3])
INTANTO -> Utente1 si accorge che qualcuno si è connesso sulla porta 5002 e lo notifica. Utente2 si accorge che qualcuno si è connesso sulla porta 5001 e lo notifica.

Mistero risolto :) Buon lavoro ;)

PS Dai dei nomi più significativi cosi magari capisci, e fai capire, anche meglio cosa scrivi  :P

PPS Il codice a cui faccio riferimento te l'ho mandato per posta perchè non sapevo se potevo pubblicarlo nonostante i tagli ;D
4other
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 421
Iscrizione: venerdì 12 ottobre 2007, 9:01

Re: problema di connessione con socket TCP

Messaggio da 4other »

grazie mille..
e scusa il ritardo!!!
Avatar utente
Balim
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 288
Iscrizione: martedì 19 febbraio 2008, 17:50

Re: problema di connessione con socket TCP

Messaggio da Balim »

Nessun problema ;) spero di esserti stato d'aiuto :)
4other
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 421
Iscrizione: venerdì 12 ottobre 2007, 9:01

Re: problema di connessione con socket TCP

Messaggio da 4other »

scusami  il ritardo ma avevo da fare(esami),cmq non ho ancora risolto quel problema..ma credo ke cambiero radicalmente il codice,cmq il connect si puo fare anche senza il bind,dato che l'associazione della socket al servizio e intrinseca nel comando,infatti passi socket e servizio!!!
Avatar utente
Balim
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 288
Iscrizione: martedì 19 febbraio 2008, 17:50

Re: problema di connessione con socket TCP

Messaggio da Balim »

Si ok ma io intendevo che fare connect() prima di bind() significa far fallire sicuramente la system call (connect) ed io personalmente non vedo che senso abbia lanciare un system call che sicuramente fallirà ;)
4other
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 421
Iscrizione: venerdì 12 ottobre 2007, 9:01

Re: problema di connessione con socket TCP

Messaggio da 4other »

no..perche???in fondo credo che il connect cerchi una porta ke e messa in listen!!!lpoi se la porta c'e....bene, altrimenti non va a buon fine...secondo me sono due cose distinte...logico che il connect vada a buon fine se prima c'e stato un bind(serve appunto qualcuno che ascolti)..ma il connect si puo lanciare lo stesso,la procedura e corretta..ma ke poi non vada a buon fine e un'altro discorso!!!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti