Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    [C#] Problema con memoria Client TCP

    Ciao a tutti...
    questa è la situazione:

    Ho creato un client in C#.
    Se lo avvio tramite visual studio, quindi in modalità debug funziona senza problemi.
    Se invece lo avvio dall'eseguibile generato (quindi senza visual studio)
    una volta connesso al server dopo circa 10 secondi il client va in crash dicendo che il programma va in out of memory.
    (errore:System.OutOfMemoryException)

    Credo che il problema sia in questo punto:
    codice:
            private void ReceiveData(object client)
            {
                TcpClient tcpClient = (TcpClient)client;
                NetworkStream clientStream = tcpClient.GetStream();
    
                byte[] message = new byte[tcpClient.Client.Available]; // da qui
    
                int bytesRead = 0;
    
                try
                {
                    bytesRead = clientStream.Read(message, 0, tcpClient.Client.Available);
                }
                catch
                {
    
                } // a qui
    
                ASCIIEncoding encoder = new ASCIIEncoding();
                System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
                CommandString = (encoder.GetString(message, 0, bytesRead));
    
                string[] split = CommandString.Split('/');
    
                StartCommand(split[0], split[1]);
            }
    La funzione precedente viene attivata da questo codice:

    codice:
            public void Connect()
            {
                try
                {
                        LoginForm.log_listbox_ref.Items.Add("Connecting...");
    
                        IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("25.213.156.36"), 8001);
    
                        Main.User.client.Connect(serverEndPoint);
                        Main.User.listenThread = new Thread(new ThreadStart(ListenForServer));
                        Main.User.listenThread.Start();
    
                        LoginForm.log_listbox_ref.Items.Add("Connected");
    
                }
                catch (Exception ex)
                {
                    LoginForm.log_listbox_ref.Items.Add(ex.Message);
                }   
            }
    
            private void ListenForServer()
            {
                while (true)
                {
                    Thread clientThread = new Thread(new ParameterizedThreadStart(ReceiveData));
                    clientThread.Start(Main.User.client);
                }
            }
    Penso che ci sia qualche problema con il loop che riceve messaggi...
    ma non ho idea di come metterlo in pausa...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa ma questo ciclo

    codice:
    private void ListenForServer()
    {
                while (true)
                {
                    Thread clientThread = new Thread(new ParameterizedThreadStart(ReceiveData));
                    clientThread.Start(Main.User.client);
                }
    }
    che senso ha?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Originariamente inviato da oregon
    Scusa ma questo ciclo

    codice:
    private void ListenForServer()
    {
                while (true)
                {
                    Thread clientThread = new Thread(new ParameterizedThreadStart(ReceiveData));
                    clientThread.Start(Main.User.client);
                }
    }
    che senso ha?
    Riceve continuamente i dati che invio dal server
    Altrimenti dovrei fare connettere e disconnettere il client ogni volta che deve fare qualcosa...
    voglio che la connessione sia continua...
    in modo che quando voglio posso far disconnettere il client oppure mandargli un messaggio..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quel codice continua in un ciclo infinito a creare e avviare nuovi thread.

    Mi meraviglio che lo faccia per 10 secondi ... quel codice ovviamente blocca tutto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Originariamente inviato da oregon
    Quel codice continua in un ciclo infinito a creare e avviare nuovi thread.

    Mi meraviglio che lo faccia per 10 secondi ... quel codice ovviamente blocca tutto.
    Interpretavo il codice in un altro modo...
    ho levato il loop e ora funziona benissimo...
    grazie mille

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.