• 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 [C#] Primi passi con i Socket

Yes, ho già provato a metterlo in precedenza e... errore dopo errore :emoji_relieved:

Screen errore nel mettere static al metodo receiveData:
Perfavore, Entra oppure Registrati per vedere i Link!

si perché i tipi che si possono utilizzare sono solo static , nei metodi statici. Comunque non risolvi prima lasciando così com'è e mettendo un normale try catch :|
 
riporta il codice come stava prima e segui i suggerimenti che t'avevo scritto nel post precedente

Allora, ricapitolando:

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

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

Quando chiudo la form senza startare server mi genera quest'eccezione:
Perfavore, Entra oppure Registrati per vedere i Link!

Quando chiudo la form startando il server..... non si chiude
 
Allora, ricapitolando:

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

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

Quando chiudo la form senza startare server mi genera quest'eccezione:
Perfavore, Entra oppure Registrati per vedere i Link!

Quando chiudo la form startando il server..... non si chiude

ma è normale che lanci eccezione th non esiste se non premi il tasto start ,tra l'altro l'msgbox parla in maniera chiara .
Nel secondo caso deve eseguire il join del thread

tra l'altro con Join in questo modo non andrà mai perché attendi che il thread termini cosa che non avverrà mai , c'è il while in ReceiveData.

Quindi fai così :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
ma è normale che lanci eccezione th non esiste se non premi il tasto start ,tra l'altro l'msgbox parla in maniera chiara .
Nel secondo caso deve eseguire il join del thread

tra l'altro con Join in questo modo non andrà mai perché attendi che il thread termini cosa che non avverrà mai , c'è il while in ReceiveData.

Quindi fai così :

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

Non capisco... allora il try catch l'ho aggiornato come mi hai suggerito... non cambia nulla

Ma poi se Join() attende la chiusura del thread - cosa che non può avvenire perchè c'è il while - allora come lo chiudo e dove?
 
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

sul ui thread non deve eseguire operazioni dispendiose in tempo di cpu. Quindi levando queste istruzioni e suddividendole in thread , puoi tranquillamente chiudere il server. ^^
 
@TBH allora ho aggiornato un po' il codice cercando di seguire i tuoi consigli per quanto riguarda la suddivisione in più Thread (creando anche una nuova classe, suddividendo ancor di più le funzioni) ma ho riscontrato una nuova eccezione:
Perfavore, Entra oppure Registrati per vedere i Link!


Come ho fatto a riscontrarla?
Ho aperto server, l'ho fatto partire, ho aperto client e ho mandato alcune richieste, ho chiuso il server (non la form) tramite il bottone STOP SERVER, ho chiuso il client, ho provato a chiudere la form ed ecco che riscontro l'eccezione!

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

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

Classe 2
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
@TBH allora ho aggiornato un po' il codice cercando di seguire i tuoi consigli per quanto riguarda la suddivisione in più Thread (creando anche una nuova classe, suddividendo ancor di più le funzioni) ma ho riscontrato una nuova eccezione:
Perfavore, Entra oppure Registrati per vedere i Link!


Come ho fatto a riscontrarla?
Ho aperto server, l'ho fatto partire, ho aperto client e ho mandato alcune richieste, ho chiuso il server (non la form) tramite il bottone STOP SERVER, ho chiuso il client, ho provato a chiudere la form ed ecco che riscontro l'eccezione!

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

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

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

colpa del blocco finally :soso:
 
colpa del blocco finally :soso:

Uhm... possibile che un finally crea un eccezione nello stack? wow...

Comunque, questa volta ho provato a trasferire il CLIENT su una Form. Risultato:

Creo un socket che identifica il server e mi connetto a esso prelevando i dati dalle due textBox. Nascondo poi la seguente Form1 del client per aprire la Form2 mediante la quale potrò inoltrare richieste al server. Il mio scopo è mandare il Socket del server dalla Form1 alla Form2 mediante una classe e due metodi: get e set

Questo è il form del Client
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Classe (get e set)
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Quando, tramite la Form2, mando (SEND) una richiesta, il programma non risponde più...
 
Uhm... possibile che un finally crea un eccezione nello stack? wow...

Comunque, questa volta ho provato a trasferire il CLIENT su una Form. Risultato:

Creo un socket che identifica il server e mi connetto a esso prelevando i dati dalle due textBox. Nascondo poi la seguente Form1 del client per aprire la Form2 mediante la quale potrò inoltrare richieste al server. Il mio scopo è mandare il Socket del server dalla Form1 alla Form2 mediante una classe e due metodi: get e set

Questo è il form del Client
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Classe (get e set)
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Quando, tramite la Form2, mando (SEND) una richiesta, il programma non risponde più...

ma il discorso che ho fatto che sull'Ui thread non ci deve essere mai in while ripetuto all'infinito te lo sei dimenticato? :facepalm:

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



vedi che creava una stackOverflow perché continuavi a chiamare il metodo Form_Closing() .
 
ma il discorso che ho fatto che sull'Ui thread non ci deve essere mai in while ripetuto all'infinito te lo sei dimenticato? :facepalm:

Ho creato un thread che richiama un metodo che esegue all'infinito quelle istruzioni (spostando quindi il loop via dall'UI Thread). Beh, la Form si chiude... ma il Label non mi mostra la risposta del server

Form2.cs
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ho creato un thread che richiama un metodo che esegue all'infinito quelle istruzioni (spostando quindi il loop via dall'UI Thread). Beh, la Form si chiude... ma il Label non mi mostra la risposta del server

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

già tanto che non ti lanci eccezione :emoji_relieved: , gli elementi del form puoi aggiornarli solo dall'Ui thread quindi devi usare un delegate per aggiornare i label:
ti lascio un esempio :
Perfavore, Entra oppure Registrati per vedere i Link!


n.b dato che si tratta di solo testo ... potresti anche usare CheckForIllegalCrossThreadCalls , in questo modo non controlli da quale thread abbia ordinato la modifica di un componente. Ovviamente tale procedura è sconsigliatissima
 
Ultima modifica:
già tanto che non ti lanci eccezione :emoji_relieved: , gli elementi del form puoi aggiornarli solo dall'Ui thread quindi devi usare un delegate per aggiornare i label:
ti lascio un esempio :
Perfavore, Entra oppure Registrati per vedere i Link!


n.b dato che si tratta di solo testo ... potresti anche usare CheckForIllegalCrossThreadCalls , in questo modo non controlli da quale thread abbia ordinato la modifica di un componente. Ovviamente tale procedura è sconsigliatissima

E' da quando mi hai inviato il messaggio che sto cercando di capire sti delegate... potresti aiutarmi a modo tuo? Non capisco come attuarli al mio progetto...
@TBH
 
Ultima modifica:
E' da quando mi hai inviato il messaggio che sto cercando di capire sti delegate... potresti aiutarmi a modo tuo? Non capisco come attuarli al mio progetto...
@TBH

va be ti suddivido il tutto io allora :
-dichiarazone delegate (con riferimento al metodo)
-istanza nel thread
-invocazione e passaggio del testo da modificare sull'ui thread.
 
va be ti suddivido il tutto io allora :
-dichiarazone delegate (con riferimento al metodo)
-istanza nel thread
-invocazione e passaggio del testo da modificare sull'ui thread.

Ma a cosa mi serve sto delegate? Non posso passare direttamente il testo all'UI Thread?