Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,436

    [VB.NET] Mantenere aperta connessione su socket in ascolto

    salve a tutti
    ho del codice, in basso, che mi serve per ascoltare i dati che arrivano su TCP in una determinata porta (la 3001), il problema è che non riesco a mantenere la connessione aperta,se da un client mando una stringa alla porta (tutto bene), se di disconnette , poi si riconnette e ne manda un'altra , non la cattura!!!!
    Nel codice si nota been che ho cercato di impostare un ciclo infinito con while(true), ma sebbene questo dopo la disconnessione del client, dopo non mi cattura i dati in entrata!!
    cosa sbaglio?

    codice:
    using System.Net.Sockets;
    
    
    class Program
    {
    
    
        private static BackgroundWorker worker = new BackgroundWorker();
    
    
        static void Main(string[] args)
        {
            Program P = new Program();
    
    
            P.notifyIcon1.Visible = true;
            P.ipaddress = IPAddress.Any;
            P.tcpServer = new TcpServer(P.ipaddress.ToString(), 3001);
    
    
            worker.DoWork += worker_DoWork;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            //worker.ProgressChanged += worker_ProgressChanged;
            worker.WorkerReportsProgress = true;
            worker.WorkerSupportsCancellation = true;
            if (!worker.IsBusy) worker.RunWorkerAsync();
    
    
            Console.WriteLine("Press ENTER to exit the server.");
            Console.ReadLine();
        }
    
    
    
    
        static void worker_DoWork(object sender, DoWorkEventArgs e)
        {
             IPEndPoint endPoint;
            Socket tcpClient;
            Socket listener;
            int pendingConnectionQueueSize;
            IPAddress ipaddress = IPAddress.Any;
    
    
            endPoint = new IPEndPoint(ipaddress, 3001);
    
    
            pendingConnectionQueueSize = 100;
            listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            listener.Bind(endPoint);
            listener.Listen(pendingConnectionQueueSize);
    
    
            Console.WriteLine("conn..");
            byte[] receiveBuffer = new byte[4096];
            tcpClient = listener.Accept();
            tcpClient.RemoteEndPoint.ToString();
    //while(true)
    //{
           while ((rc = tcpClient.Receive(receiveBuffer)) > 0)
            {               
                 string msg = Encoding.ASCII.GetString(receiveBuffer);    
                 Console.WriteLine(msg.Trim());
            }
    //}
            listener.Shutdown(SocketShutdown.Both);
            listener.Close();
        }
        static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (!worker.IsBusy) worker.RunWorkerAsync();//restart    
        }
    
    
    }
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,904
    Ma quella classe TcpServer da dove arriva?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,436
    No la puoi ignorare
    Era un aprova
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,904
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    No la puoi ignorare
    Era un aprova
    Non puoi porre un problema e riportare del codice che non è quello che stai utilizzando o che contiene delle "cose da ignorare": anche se parziale, il codice deve essere corretto, reale e significativo, altrimenti risulta completamente inutile riportarlo, da cui ne consegue che non è nemmeno possibile darti una mano a individuare l'errore.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

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 © 2020 vBulletin Solutions, Inc. All rights reserved.