Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C#] mantenere connessioni attive - socket multipli

    Ciao a tutti,

    Devo realizzare per lavoro una architettura client/server per la gestione remota di apparecchiature su cui gira del software realizzato in c++,queste macchine sono molto probabilmente dietro un router quindi per evitare la loro configurazione tramite un NAT ho pensato ti mantenere un canale socket attivo per ogni client(macchina).Cosi facendo (credo) aggirerei il problema del NAT in quanto il client non ha alcun problema ad uscire dalla propria rete per comunicare con il server (con ip pubblico) .
    Ora mi chiedo ,è possibile questa cosa?o come architettura è sbagliata in principio?

    Ora nel server che ho implementato (in parte) mi metto in ascolto su una porta stabilita....ad ogni richiesta di connessione creo un istanza di un oggetto che rappresenta il client che ha richiesto la connessione a cui passo l'istanza del socket,quest'oggetto ha un proprio thread che mantiene la connessione attiva in modo da essere poi utilizzato per la comunicazione.Questi oggetti vengono poi memorizzati in una lista dell'oggetto server,in modo da poter essere richiamati in un secondo momento.

    Cosi facendo pero credo che l'istanza del socket che passo a questi oggetti sia sempre la stessa,perchè non faccio altro che passargli un riferimento. :master:
    Ovviamente il sistema ha dei problemi...sto cercando di risolverli ma senza particolari successi e vorrei capire se questo è dovuto alla logica sbagliata dell'approccio al problema oppure dipende dal codice scritto male.


    In secono luogo dovrei cercare di far comunicare delle pagine aspx con il mio server(applicazione a console) prevedo parecchi problemi anche qui!!!

    spero di non essere stato contorto nella spiegazione....qualsiasi idea è ben accetta!!!
    mic

  2. #2
    vi è venuta qualche ispirazione?
    mic

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    se tu usi un socket listener (come un tcpListener) accettando la connessione di un socket ricevi un istanza di quel socket.. ad una seconda connessione l'istanza sarà per forza diversa (sennò si solleva un'eccezione ma è praticamente impossibile)..

    Usi socket base o socket tcp?

  4. #4
    intercetto le connessioni tramite un TCPListner,cosa intendi per socket base e socket TCP!?


    codice:
            private void ascoltoConnessioni()
            {
                Console.WriteLine("Server attivo...");
    
                connessioneTCP = new TcpListener(ip, porta);            
                connessioneTCP.Start();
    
                while (true)
                {
                    //Rimango in ascolto di eventuali chiamate dai client
                    Socket client = connessioneTCP.AcceptSocket();
                    try
                    {
                        if (client.Connected)
                        {
                            setNumeroConnessioni();
                            Console.WriteLine("Client connesso");
                            try
                            {
                                 
                                //oggetto che rappresenta il client
                                GestioneClient gc = new GestioneClient(client);
                                gc.Start();
                                
                                //hashtable che mantiene il riferimento ai client connessi
                                this.hashUser.Add(gc.matricola, gc);
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e.Message);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                    }
                }
            }

    Questo è un estratto del codice che rimane in ascolto delle connessioni....gestioneClient è un oggetto che rappresenta il client,accetta un socket come parametro,e ha metodi per comunicare in lettura e scrittura sul proprio canale socket.
    mic

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    un socket base è un socket puro (indipendentemente dal protolollo utilizzato)
    un socket tcp è un'implementazione di quello base adattato per il protocollo tcp..

    quando fai acceptSocket crei un riferimento al socket che utilizzi per la comunicazione..

    ad ogni acceptSocket viene generato un socket diverso e quindi non è possibile avere duplicati.. (almeno in linea teorica)

  6. #6
    Scusate se mi intrometto... Stoicenko, se con ogni acceptSocket viene generato un socket diverso per ogni client, se il server vuole inviare un messaggio (ad esempio una stringa) ad un singolo client ben definito, come fa? Cioè dico, che codice bisogna usare per inviare un messaggio ad un determinato client? (ammettendo che ce ne siano + di 1 connesso)

    Grazie per la risposta

    (ovviamente se vuole rispondere anche qualcun'altro, mi farebbe piacere... grazie :P)

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La tua domanda ha insita la risposta ... la risposta va all' IPorta del client ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Mmm... si in effetti hai ragione, potevo arrivarci. Cmq puoi darmi qualche suggerimento sulla sintassi, quindi come farmi restituire l'ip dal socket?

    Edit: Ah un altra cosa, io sò inviare una stringa ai client, ma non sò esattamente dirgli a che ip inviarla, puoi scrivermi la sintassi anche di un invio ad un certo ip? Ad esempio tho 192.168.1.36.

    Grazie infinitamente, gentilissimo...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Un attimo ... ma che c'entra la tua richiesta con quella di questo thread fatta da michele79?

    Dovresti aprire un altro thread con la tua specifica richiesta e non agganciarti con altre domande ad un thread aperto in precedenza con un'altra domanda ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Mmm... non parlava dei multi socket? La mia domanda e su come utilizzarli diciamo, mi sembra collegato, dici che non va bene?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.