Uccidere processi figli

mercoledì 12 maggio 2004 - 18.56

19018 Profilo | Expert

Ho scritto due applicazioni una che funge da client ed una da server...il problema è questo...il server è sempre in ascolto e quando riceve una richiesta di connessione, se questa viene accettata, per ogni client che si connette il server fa partire un lettura dello stream asincrona con il metodo stream.beginRead e quindi chiama un'altra funzione che gestisce tutta la lettura dati e restituisce alla chiamata asincrona un valore di ritorno per indicare che la lettura è finita poi richiama stream.beginRead per altre eventuali comunicazione da parte del server...quando però chiudo il server tutti i processi figli che vengono generati per ogni client dalla chiamata asincrona rimangono attivi...come li uccido???grazieee

Brainkiller Profilo | Guru

Non so come fai a gestire il tutto crei dei nuovi Thread ? O gestisci i Socket con un array ?
In genere quando fai uno shutdown del server/programma dovresti chiuderlo in maniera "gracefully" come si dice in gergo cioè pulendo tutte le risorse usate, finestre, sockets, threads, ecc.
Se usi Threads bisogna chiuderli facendoli terminare o con il metodo Abort() se non ricordo male.

ciao
david

19018 Profilo | Expert

lasciando perdere il fatto che + client si possono connettere al server ,ti spiego cosa accade quando un solo client si connette al server...allora il server è implementato con la classe TCPListener ed è in ascolto grazie al metodo AcceptTcpClient dopo viene creato lo stream comunicare col client infine c'è una funzione fatta da me che fa si che il server di continuo ascolti quel client , essenzialmente questa funzione non è altro che questa riga di codice :
_Stream.BeginRead(_InBuffer, 0, _InBuffer.Length, AddressOf DataReceived, Nothing)
è un metodo asincrono che permette al server di aspettare che il client gli invii dati e solo quando quando ciò avviene allora viene chiamata la funzione DataReceived il cui codice è questo :
Private Sub DataReceived(ByVal ar As IAsyncResult)
Dim ris As Integer
ris = _Stream.EndRead(ar)

If ris = 0 Then
EchoData("Client disconnected...")
_Stream.Close() 'chiudi lo questo stream
_Stream = Nothing
_Client.Close() 'chiudi questo tcpclient
_Client = Nothing
Else
_InBufferMsg = System.Text.Encoding.ASCII.GetString(_InBuffer)
ListBox1.Items.Add(Date.Now & " >> Client send ---> " & _InBufferMsg)
StartRead()
End If
end sub

ora il problema è questo...ogni volta che il client si connette parte questa funzione asincrona che da vita ad un processo indipendente da quello padre e che vive per i fatti suoi appunto perchè alla fine è una callback quiandi quando devo chiudere la form del server questo cavolo di processo rimane in vita e si evince dal taskmanager....COME FACCIO PER FARLO CESSARE QUANDO VOGLIO IO???

ciccio.unico Profilo | Newbie

Non so se ti può aiutare ma dà un'occhaita qui:
http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/cpguide/html/cpconASynchronousFileIO.asp

ciccio.unico@libero.it
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5