Questo topic e' stato chiuso dal moderatore.
21/12/10 19:59
Question
Ciao a tutti,
starei provando a creare una classe personalizzata di socket per "simulare" gli eventi del vecchio winsock e per esercitarmi un po' (non mi piaceva per niente l'idea di usare dei timer).
Per ora ho scritto veramente poco e credo che il codice non abbia bisogno di commenti o di essere spiegato,vi chiedo dunque di dargli una letta.
Ovviamente il problema è che una volta avviata la procedura Listen rimane fermo al ciclo Do,così ho pensato di implementare altri due metodi chiamati ConnectAsync e ListenAsync usando i thread,quà però succede una cosa che non mi torna:
"Impossibile stabilire una connessione. Rifiuto persistente del computer 127.0.0.1:200"
Qui sotto trovate l'intera classe priva dei metodi async (data la mia grande conoscenza dei thread ho pensato che il tutto derivasse da una mia pessima gestione di questi oggetti xD).
Potete aiutarmi con i thread? O c'è un modo migliore per fare quello che voglio fare?
starei provando a creare una classe personalizzata di socket per "simulare" gli eventi del vecchio winsock e per esercitarmi un po' (non mi piaceva per niente l'idea di usare dei timer).
Per ora ho scritto veramente poco e credo che il codice non abbia bisogno di commenti o di essere spiegato,vi chiedo dunque di dargli una letta.
Ovviamente il problema è che una volta avviata la procedura Listen rimane fermo al ciclo Do,così ho pensato di implementare altri due metodi chiamati ConnectAsync e ListenAsync usando i thread,quà però succede una cosa che non mi torna:
"Impossibile stabilire una connessione. Rifiuto persistente del computer 127.0.0.1:200"
Qui sotto trovate l'intera classe priva dei metodi async (data la mia grande conoscenza dei thread ho pensato che il tutto derivasse da una mia pessima gestione di questi oggetti xD).
Potete aiutarmi con i thread? O c'è un modo migliore per fare quello che voglio fare?
Imports System.Net Imports System.Net.Sockets Class MikleSocket Private _Status As Byte = 0 Private LocalIP As IPAddress = Dns.Resolve(Dns.GetHostName).AddressList(0) Private sckListener As TcpListener, sckClient As TcpClient Public Event ConnectionRequest As System.ComponentModel.CancelEventHandler Public Event Connecting As System.ComponentModel.CancelEventHandler Public Event Connected As System.EventHandler Public ReadOnly Property Status As String Get Select Case _Status Case 0 Return "Disconnected" Case 1 Return "Listening" Case 2 Return "Connected" Case 3 Return "Waiting" Case Else Return "Unknow" End Select End Get End Property Public Sub Listen(ByVal Port As Int16) Dim e As New System.ComponentModel.CancelEventArgs sckListener = New TcpListener(LocalIP, Port) sckListener.Start() _Status = 1 Do Until sckListener.Pending Application.DoEvents() Loop _Status = 3 RaiseEvent ConnectionRequest(Me, e) If e.Cancel = False Then sckListener.AcceptTcpClient() _Status = 2 End If End Sub Public Sub Connect(ByVal Host as String,ByVal Port as Int16) Dim e As New System.ComponentModel.CancelEventArgs sckClient = New TcpClient(Host, Port) _Status = 3 RaiseEvent Connecting(Me, e) If e.Cancel Then sckClient.Close() _Status = 0 End If Do Until sckClient.Connected Application.DoEvents() Loop _Status = 2 RaiseEvent Connected(Me, EventArgs.Empty) End Sub End Class
Ultima modifica effettuata da Question 21/12/10 22:54
aaa