Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-03-2006, 23:36   #1
Vault
Member
 
L'Avatar di Vault
 
Iscritto dal: Dec 2002
Città: Mantova & Milano
Messaggi: 86
[C] client+server

Ciao a tutti, oggi ho iniziato a scrivere uno dei primi programmi che ci hanno proposto all'università... uno che inizia come client e cerca un server a cui connettersi, e se non lo trova, diventa server per gli altri futuri client. In pratica il primo che parte fa da server. Ora, a me ovviamente pare di aver scritto tutto giusto, ma quando lo faccio girare su linux si inchioda alla bind...
addr_init è una funzione che inizializza una struct sockaddr.

variabili:
Codice:
int sd, new_sd, conn_err, bind_err, listen_err;
struct sockaddr_in mio_addr, altro_addr;
int mio_len = sizeof( mio_addr ), altro_len = sizeof( altro_len );
codice:
Codice:
sd = socket( AF_INET, SOCK_STREAM, 0 );
conn_err = connect( sd, (struct sockaddr *) &altro_addr, altro_len );
if( conn_err == 0 ) { ...}
else {
close( sd ); addr_init( &mio_addr, PORT, INADDR_ANY ); sd = socket( AF_INET, SOCK_STREAM, 0 ); bind_err = bind( sd, (struct sockaddr *) &mio_addr, mio_len ); listen_err = listen( sd, MAXCONN ); new_sd = accept( sd, (struct sockaddr *) &altro_addr, &altro_len ); close( new_sd ); close( sd );
}
I miei tentativi:
1)all'inizio, avevo usato al posto di mio_addr e altro_addr le variabili cln_addr e srv_addr, ma non sono riuscito ad implementarle rispettando i loro nomi e il programma si inchiodava. usavo srv_addr sia nella parte client, che nella parte server (in addr_init e nella bind)
2)non capisco ancora se è necessario chiudere e riaprire il socket sd...

Grazie a tutti!
__________________
No! Provare no! Fare, o non fare. Non c'è provare.
Feedback positivi per: vortex99, 10ruicosta10, lera757.
Vault è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 06:33   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ciao,
1 - quando parli del fatto che si inchioda alla bind, intendi che il programma resta bloccato li' o che la bind fallisce?
2 - il codice pubblicato e' una semplificazione? In pratica, controlli i valori di ritorno delle funzioni? Normalmente le funzioni da te usate, quando falliscono, ritornano -1 e settano la variabile errno, che contiene il codice dell'errore. Lo stampi ? Meglio ancora, puoi guardare cosa ti dice la perror (la quale stampa la stringa associata al codice di errore)?

Es.
res = funzione (...);
if (res < 0)
perror ("Errore nella funzione... "); // La stampa sara' seguita dal messaggio di errore "esteso"

Posta poi i risultati

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 11:51   #3
Vault
Member
 
L'Avatar di Vault
 
Iscritto dal: Dec 2002
Città: Mantova & Milano
Messaggi: 86
1) Intendo che la bind si inchioda, e sono costretto a terminare il programma.

2) Il codice è una semplificazione, con le printf di debug si allungava a dismisura. In particolare ho creato la funzione
void errore( int ); alla quale passare errno, e che mi fornisce, tramite strerror, gli errori delle funzioni che eseguo.

Generalmente ottengo questo output (vado a memoria):
Codice:
Socket creato.
Impossibile connettersi.
Chiudo il canale.

Socket creato. /*stavolta tramite server */
Bind riuscita.
e qui si inchioda... so che la successiva listen è un interrupt, e quindi tra la printf "Bind riuscita" e la listen ne ho messa un'altra, "in attesa di connessioni", che però non compare mai
Però mi ricordo che ieri ho tolto un pezzo del codice finale del server, ed era arrivato fino alla fine, ovviamente con i dovuti errori perché mancavano dei pezzi.
__________________
No! Provare no! Fare, o non fare. Non c'è provare.
Feedback positivi per: vortex99, 10ruicosta10, lera757.

Ultima modifica di Vault : 30-03-2006 alle 12:06.
Vault è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 15:44   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ciao,
quindi vedevi uscire "Bind riuscita". Immagino che tu abbia messo il controllo, per cui se la bind() non funziona, scrivi "non riuscita", altrimenti "riuscita", giusto?
Scusa se sono pedante, ma fa parte della ricerca degli errori, no?

A questo punto non capisco perche' dai la colpa alla bind e non a qualcosa che segue.

Piccola check list (se ti va di eseguirla. Sai, da pilota, e' obbligatorio eseguirle alla lettera...):
1) hai controllato il valore sd dopo la seconda socket ()?
2) hai controllato cosa contiene la mio_addr? SU ALCUNE PIATTAFORME LA DEVI REINIZIALIZZARE!!!
3) hai controllato bind_err e errno dopo l'esecuzione della bind? Per controllare, usa la perror (), e' piu' facile ed i suoi messaggi sono standard.
(res = bind (...); if (res < 0) perror ("Errore!"); )
4) Hai controllato la listen () alla stessa maniera del punto 2 ?
5) A questo punto, se tutto va bene, il programma deve rimanere bloccato nella accept() fintanto che qualcuno non si collega. Pertanto non e' necessario controllare oltre.
6) Hai pubblicato le perror()?

Spero ti possa essere utile.

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 16:17   #5
Vault
Member
 
L'Avatar di Vault
 
Iscritto dal: Dec 2002
Città: Mantova & Milano
Messaggi: 86
Allora oggi ho chiesto al mio prof di informatica e ho imparato che le "\n" vanno alla fine della printf, altrimenti potrebbero non essere visualizzate, come succedeva a me: quello che blocca è dunque la listen, ma siccome dopo la bind non stampava credevo fosse quella.

1) Adesso ho che il primo simm.exe ad essere avviato arriva con successo alla listen; il secondo però non vede il primo, e tenta anche lui di diventare server, ma la listen fallisce poiché il socket è già utilizzato. cosa c'è che non va?
2) io utilizzo la strerror come debug; ho guardato l'help della perror e non ho capito bene come funziona: devo inserirci la funzione che mi ha dato errore, ad esempio perror( "fork" ); ?

Grazie ancora!
__________________
No! Provare no! Fare, o non fare. Non c'è provare.
Feedback positivi per: vortex99, 10ruicosta10, lera757.
Vault è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 16:43   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Vault
Ciao a tutti, oggi ho iniziato a scrivere uno dei primi programmi che ci hanno proposto all'università... uno che inizia come client e cerca un server a cui connettersi, e se non lo trova, diventa server per gli altri futuri client. In pratica il primo che parte fa da server. Ora, a me ovviamente pare di aver scritto tutto giusto, ma quando lo faccio girare su linux si inchioda alla bind...
addr_init è una funzione che inizializza una struct sockaddr.

variabili:
Codice:
int sd, new_sd, conn_err, bind_err, listen_err;
struct sockaddr_in mio_addr, altro_addr;
int mio_len = sizeof( mio_addr ), altro_len = sizeof( altro_len );
codice:
Codice:
sd = socket( AF_INET, SOCK_STREAM, 0 );
conn_err = connect( sd, (struct sockaddr *) &altro_addr, altro_len );
if( conn_err == 0 ) { ...}
else {
close( sd ); addr_init( &mio_addr, PORT, INADDR_ANY ); sd = socket( AF_INET, SOCK_STREAM, 0 ); bind_err = bind( sd, (struct sockaddr *) &mio_addr, mio_len ); listen_err = listen( sd, MAXCONN ); new_sd = accept( sd, (struct sockaddr *) &altro_addr, &altro_len ); close( new_sd ); close( sd );
}
I miei tentativi:
1)all'inizio, avevo usato al posto di mio_addr e altro_addr le variabili cln_addr e srv_addr, ma non sono riuscito ad implementarle rispettando i loro nomi e il programma si inchiodava. usavo srv_addr sia nella parte client, che nella parte server (in addr_init e nella bind)
2)non capisco ancora se è necessario chiudere e riaprire il socket sd...

Grazie a tutti!

Mmmm , addr_init() ... ma tu vai al Poli di milano per caso?

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 20:29   #7
Vault
Member
 
L'Avatar di Vault
 
Iscritto dal: Dec 2002
Città: Mantova & Milano
Messaggi: 86
Sì! La funzione più precisamente sarebbe addr_initialize
__________________
No! Provare no! Fare, o non fare. Non c'è provare.
Feedback positivi per: vortex99, 10ruicosta10, lera757.
Vault è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2006, 21:32   #8
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Ragazzi...
ma al POLI di Milano al primo anno di Ing. Informatica abbiamo tutti la dispensa del Prof. Pelagatti (il mio prof.) per l'esame di Informatica 2 ?!

Vault in che scaglione sei?

EDIT La tua citazione di Yoda in firma che bella cosa...

Ultima modifica di sirus : 30-03-2006 alle 21:36.
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 00:00   #9
Vault
Member
 
L'Avatar di Vault
 
Iscritto dal: Dec 2002
Città: Mantova & Milano
Messaggi: 86
Sì, abbiamo tutti la dispensa di quello che è anche il mio prof
In info2 adesso nel Po-Z... va a finire che ti ho già visto!

{edit 01.43} Ho risolto il problema, era colpa di un invisibile errore di scrittura, che ovviamente non era anche un errore logico. L'unico indizio è stato l'errore di una connect, "invalid argument", invece che "connection refused" come deve essere... Grazie a tutti per l'aiuto!
__________________
No! Provare no! Fare, o non fare. Non c'è provare.
Feedback positivi per: vortex99, 10ruicosta10, lera757.

Ultima modifica di Vault : 31-03-2006 alle 00:43.
Vault è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 06:32   #10
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Vault
Sì, abbiamo tutti la dispensa di quello che è anche il mio prof
In info2 adesso nel Po-Z... va a finire che ti ho già visto!

{edit 01.43} Ho risolto il problema, era colpa di un invisibile errore di scrittura, che ovviamente non era anche un errore logico. L'unico indizio è stato l'errore di una connect, "invalid argument", invece che "connection refused" come deve essere... Grazie a tutti per l'aiuto!
Bene!
L'ultima cosa riguarda la perror (): in fase di debug e' molto utile.
La sintassi e':
perror ("messaggio qualsiasi");
Il messaggio verra' stampato a schermo, seguito poi dalla stringa di errore, ricavata dal valore di errno.

Per esempio:

Codice:
 
f = open ("questofilenonesiste.txt", O_RDONLY);
if (f < 0)
  perror ("Errore apertura questofilenonesiste.txt\n");
potrebbe stamparti:
Errore apertura questofilenonesiste.txt
:No such file or directory

o qualcosa di simile. Comodo, no?

High Flying
Sottovento
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 18:40   #11
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da Vault
Sì, abbiamo tutti la dispensa di quello che è anche il mio prof
In info2 adesso nel Po-Z... va a finire che ti ho già visto!

{edit 01.43} Ho risolto il problema, era colpa di un invisibile errore di scrittura, che ovviamente non era anche un errore logico. L'unico indizio è stato l'errore di una connect, "invalid argument", invece che "connection refused" come deve essere... Grazie a tutti per l'aiuto!
Siamo compagni di corso a tutti gli effetti anche io sono nello scaglione Po - Z...

Filippo Sironi, se sei nella seconda metà dello scaglione ci si vede Lunedì in F11 per Elettrotecnica...
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 21:25   #12
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
Quote:
Originariamente inviato da sirus
Siamo compagni di corso a tutti gli effetti anche io sono nello scaglione Po - Z...

Filippo Sironi, se sei nella seconda metà dello scaglione ci si vede Lunedì in F11 per Elettrotecnica...
ci sono anche io...
per la precisione sono quello che aiuta sirus a fare casino...
ciao
p.s.
se sei con codecasa ci sono io invece...
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 21:31   #13
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da sirus
Ragazzi...
ma al POLI di Milano al primo anno di Ing. Informatica abbiamo tutti la dispensa del Prof. Pelagatti (il mio prof.) per l'esame di Informatica 2 ?!

Vault in che scaglione sei?

EDIT La tua citazione di Yoda in firma che bella cosa...
Ehm, io in classe ho il figlio di pelagatti, quel libro lo insultano tutti e lui ci rimane malissimo. Una volta il mio esercitatore ha detto in classe "Quello che ha scritto questo libro lo dovrebbero impiccare e poi lapidarne il corpo esanime" , parole testuali Ogni giorno si diverte a trovare errori e suo figlio ...


Muahahaha, che risate

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 21:36   #14
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
ma l'hai mai visto come professore?
dopo un'ora sclera totalmente...
cmq il libro non mi pare malaccio (devo ammettere di non averlo rovinato troppo con lo studio però)
p.s.
fatti trovare al poli così spieghi al mio collega cos'è kde
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 31-03-2006, 21:59   #15
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da AnonimoVeneziano
Ehm, io in classe ho il figlio di pelagatti, quel libro lo insultano tutti e lui ci rimane malissimo. Una volta il mio esercitatore ha detto in classe "Quello che ha scritto questo libro lo dovrebbero impiccare e poi lapidarne il corpo esanime" , parole testuali Ogni giorno si diverte a trovare errori e suo figlio ...


Muahahaha, che risate

Ciao
il libro tutto sommato non è male, se confrontato con il prof. Parte sempre bene, molto molto convinto di quello che sta facendo poi mano a mano che passa il tempo la decisione e le idee vanno scemando e si inizia a seguire poco il filo del suo discorso.

Per la parte di programmazione quel libro è proprio il minimo, non fa mezza gestione di errore, cita solamente funzioni come la perror e la variabile errno...

Per la parte sul sistema operativo non ci sono molte parti, che IMHO sono fondamentali... non spiega la differenza tra kernel micro e kernel monolitici per esempio insomma va poco a fondo!!!

Speriamo che in futuro ci sia modo di farne uno studio un tantino più approfondito

Quote:
Originariamente inviato da wisher
ci sono anche io...
per la precisione sono quello che aiuta sirus a fare casino...
ciao
p.s.
se sei con codecasa ci sono io invece...
Effettivamente io e wisher facciamo un po' di casino, oltretutto nelle prime file

Quote:
Originariamente inviato da wisher
ma l'hai mai visto come professore?
dopo un'ora sclera totalmente...
cmq il libro non mi pare malaccio (devo ammettere di non averlo rovinato troppo con lo studio però)
p.s.
fatti trovare al poli così spieghi al mio collega cos'è kde
Colgo l'occasione di annunciare che il mio PC1 è FULLED LINUX BASED (ARCH) e ovviamente c'è GNOME perché io KDE proprio non lo posso vedere

HayArms, se ci becchiamo ti mostrerò le vie di GNOME e ti illuminerò la via, KDE è il lato oscuro del desktop environment
sirus è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
ECOVACS DEEBOT T50 PRO OMNI Gen2 fa piaz...
Windelo 62: catamarano a vela che unisce...
Francia, in arrivo un incentivo di 1.000...
Haier, la sorpresa a IFA: la lavatrice C...
GeForce RTX 5000 SUPER in arrivo? Sembra...
Ionity prova una soluzione contro i ladr...
Pirateria, svolta clamorosa: Dazn e Lega...
Maxi richiamo Toyota e Lexus: oltre 900....
Blackwell Ultra: fino al 45% di prestazi...
Neuralink: 12 pazienti hanno usato l'imp...
Amazon sorprende tutti oggi: valanga di ...
A19 e A19 Pro: Apple svela le differenze...
NASA: inizia l'esperimento CHAPEA per si...
DAZN rischia sanzioni milionarie per pub...
Invasione di gamer a Montecatini Terme: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v