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 } }

Rispondi quotando