Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Server, Gestione user
Forum - C# / VB.NET - Server, Gestione user

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Salve a tutti..ho creato un server con le classi tcplistener e tcpclient. Ho impostato 2 timer, uno per l'ascolto delle nuove connessioni dai client e un altro per la ricezione dei byte.

Codice sorgente - presumibilmente VB.NET

  1. [CODE] If tcplisten.Pending Then
  2.             client = tcplisten.AcceptTcpClient
  3.  
  4.             netstrm = client.GetStream
  5.  
  6.             Dim IPAddress As New IPAddress(Dns.GetHostByName(Dns.GetHostName).AddressList(0).Address)
  7.             Dim strIPAddress As String = IPAddress.ToString
  8.  
  9.             Dim ip As String = client.Client.RemoteEndPoint.ToString.Substring(0, client.Client.RemoteEndPoint.ToString.IndexOf(":"))
  10.             Ricevi.Enabled = True
  11.  
  12.             Utenti.Items.Add(ip)
  13.             GroupBox1.Text = "Utenti Connessi: " & Utenti.Items.Count()
  14.  
  15.             Dim bytes As Byte() = System.Text.Encoding.ASCII.GetBytes("Connesso al server: " & strIPAddress & " Tuo IP: " & ip)
  16.             netstrm.Write(bytes, 0, bytes.Length)
  17.             netstrm.Flush()
  18.  
  19.         End If[/CODE]



Codice sorgente - presumibilmente VB.NET

  1. [CODE] Private Sub Ricevi_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ricevi.Tick
  2.         If netstrm.DataAvailable = True Then
  3.             Dim stringar As String
  4.             Dim bytes(client.ReceiveBufferSize()) As Byte
  5.             netstrm.Read(bytes, 0, bytes.Length)
  6.  
  7.             stringar += System.Text.Encoding.ASCII.GetString(bytes)
  8.             TextBox1.Text += stringar & vbCrLf
  9.         End If
  10.     End Sub[/CODE]



vorrei gestire una liste user..sono riuscito fino ad ora solo ad aggiungere man mano quelli che entrano ma non riesco a trovare l'evento che mi permette di rilevare quando un client si disconnette.

mi potreste aiutare..?? Grazieee

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:19
Giovedì, 17/07/2008
Non c'è nessun evento del genere. TcpClient e TcpListener non espongono eventi.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 13:06
Giovedì, 17/07/2008
lo sò benissimo..ma cmq un modo per farlo ci deve essere..ho cercato in giro e ho trovato questo(lo scrivo a memoria xkè non lo trovo più)

if client.poll(0,Selectmodread) Then
dim bytes as byte = Client.avaiable
if bytes > 0 Then

METODO PER RICEVERE LE STRINGHE

Else

Il client si disconnette

End if
End if

ma poi ho avuto dei problemi..altre soluzioni??

Ultima modifica effettuata da il 17/07/2008 alle 13:08
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 15:03
Giovedì, 17/07/2008
No ... nessun altro metodo.

L'unica maniera e' controllare gli errori nelle chiamate delle funzioni che gestiscono l'I/O dei dati.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:58
Venerdì, 18/07/2008
Mi è venuto in mente un modo. Scrivi una nuova classe che eredita da TcpClient e modifica tramite polimorfismo o shadowing i metodi di chiusura (Close) e i distruttori (Dispose e Finalize). Dopo aver dichiarato un nuovo evento Closing, scrivi il codice che genera quell'evento nei metodi sopracitati. In questo modo avrai che esso viene scatenato sia quando la connessione viene chiusa sia quando il client viene distrutto dal GC come effetto di una chiusura del programma.

Mi sembra che teoricamente dovrebbe filare liscio, no?

PM Quote