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 - [VB.NET] Chat che non chatta
Forum - C# / VB.NET - [VB.NET] Chat che non chatta

Avatar
Ciccioo (Normal User)
Rookie


Messaggi: 21
Iscritto: 16/04/2009

Segnala al moderatore
Postato alle 16:41
Mercoledì, 23/12/2009
Salve, leggendo la guida di Totem al vb.net, e arrivando al capitolo dei socket con esempio di una semplice (-.-) chat, ho voluto provare anche io a costruirne una, ma ho incontrato dei problemi:

in rete: non riesco a connettere server a client, ma questo credo sia un problema di antivirus/firewall o simili, quello che mi affligge è l'altro

in locale: client e server si collegano, ho fatto la prova del 9 col netstat, ma non riesco a mandare messaggi dall' uno all' altro, ho anche notato che in qualsiasi momento lo controlli, client.available è sempre e comunque uguale a 0...

illuminatemi, questo è il codice del server...

Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net.Sockets
  2.  
  3. Public Class Form1
  4.  
  5.     Public Client As New TcpClient
  6.     Public NetStr As NetworkStream
  7.  
  8.     Public Listener As New TcpListener(25)
  9.  
  10.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  11.         Listener.Start()
  12.     End Sub
  13.  
  14.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  15.         'Se il client è connesso e ci si può scrivere
  16.         If Client.Connected and NetStr.CanWrite Then
  17.                 'Converte il messaggio In bytes
  18.                 Dim Bytes() As Byte = _
  19.                 System.Text.ASCIIEncoding.ASCII.GetBytes(TextBox1.Text)
  20.                 'E li scrive sullo stream
  21.                 NetStr.Write(Bytes, 0, Bytes.Length)
  22.             End If
  23.     End Sub
  24.  
  25.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  26.         If Listener.Pending Then
  27.             'Inizializza il client
  28.             Client = Listener.AcceptTcpClient
  29.             'Inizializza lo stream
  30.             NetStr = Client.GetStream
  31.             'Termina il controllo del timer
  32.             Timer1.Stop()
  33.             'Termina l'ascolto del TcpListener
  34.             Listener.Stop()
  35.             'Attiva il timer per la ricezione di dati
  36.             Timer2.Start()
  37.         End If
  38.     End Sub
  39.  
  40.     Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
  41.         'Se il client è connesso
  42.         If Client.Connected Then
  43.             'Se ci sono dati da leggere, che possono essere letti
  44.             If Client.Available > 0 And NetStr.CanRead Then    'PROBLEMA: client.avaible è perennemente 0 quindi la condizione è sempre falsa e non legge mai niente...
  45.                 'Legge i dati come array di bytes
  46.                 Dim Bytes(Client.ReceiveBufferSize) As Byte
  47.                 'Legge Client.ReceiveBufferSize bytes a partire dal primo
  48.                 'dallo stream e li deposita In Bytes
  49.                 'se ci sono bytes nulli, non verranno contati
  50.                 'di Default, Client.ReceiveBufferSize = 8129
  51.                 NetStr.Read(Bytes, 0, Client.ReceiveBufferSize)
  52.                 'Trasforma i bytes ricevuti In stringa
  53.                 Dim S As String = System.Text.ASCIIEncoding.ASCII.GetString(Bytes)
  54.                 'Visualizza il messaggio
  55.                 MsgBox(S, MsgBoxStyle.Information)
  56.             End If
  57.         End If
  58.  
  59.     End Sub
  60. End Class



...e questo quello del client...

Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net.Sockets
  2.  
  3. Public Class Form1
  4.  
  5.     Public Client As New TcpClient
  6.     Public NetStr As NetworkStream
  7.  
  8.  
  9.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  10.         'Se il client è connesso
  11.         If Client.Connected = True Then
  12.             'Se si può scrivere sullo stream
  13.             If NetStr.CanWrite Then
  14.                 'Converte il messaggio In bytes
  15.                 Dim Bytes() As Byte = _
  16.                 System.Text.ASCIIEncoding.ASCII.GetBytes(TextBox1.Text)
  17.                 'E li scrive sullo stream
  18.                 NetStr.Write(Bytes, 0, Bytes.Length)
  19.             End If
  20.         End If
  21.  
  22.     End Sub
  23.  
  24.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  25.         'Se il client è connesso
  26.         If Client.Connected Then
  27.             'Se ci sono dati da leggere, che possono essere letti
  28.             If Client.Available > 0 And NetStr.CanRead Then
  29.                 'Legge i dati come array di bytes
  30.                 Dim Bytes(Client.ReceiveBufferSize) As Byte
  31.                 'Legge Client.ReceiveBufferSize bytes a partire dal primo
  32.                 'dallo stream e li deposita In Bytes
  33.                 'se ci sono bytes nulli, non verranno contati
  34.                 'di Default, Client.ReceiveBufferSize = 8129
  35.                 NetStr.Read(Bytes, 0, Client.ReceiveBufferSize)
  36.  
  37.                 'Trasforma i bytes ricevuti In stringa
  38.                 Dim S As String = System.Text.ASCIIEncoding.ASCII.GetString(Bytes)
  39.                 'Visualizza il messaggio
  40.                 MsgBox(S, MsgBoxStyle.Information)
  41.             End If
  42.         End If
  43.     End Sub
  44.  
  45.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  46.         'Prova a connettersi al server
  47.         Client.Connect("127.0.0.1", 25)
  48.         Timer1.Enabled = True
  49.         'Se è avvenuta la connessione
  50.         If Client.Connected = True Then
  51.             'Inizializza lo stream
  52.             NetStr = Client.GetStream
  53.         End If
  54.         Button2.Enabled = False
  55.         If Client.Connected = True Then
  56.             MsgBox("Complimenti!")
  57.         End If
  58.     End Sub
  59. End Class



grazie :k:

PM Quote
Avatar
Daniele93 (Normal User)
Expert


Messaggi: 226
Iscritto: 29/05/2009

Segnala al moderatore
Postato alle 16:42
Mercoledì, 23/12/2009
Aspetto anche io risposte perchè lavoriamo in 2...

PM Quote