
Ciccioo (Normal User)
Rookie
    
Messaggi: 21
Iscritto: 16/04/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 |
Imports System.Net.Sockets Public Class Form1 Public Client As New TcpClient Public NetStr As NetworkStream Public Listener As New TcpListener(25) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Listener.Start() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Se il client è connesso e ci si può scrivere If Client.Connected and NetStr.CanWrite Then 'Converte il messaggio In bytes Dim Bytes() As Byte = _ System.Text.ASCIIEncoding.ASCII.GetBytes(TextBox1.Text) 'E li scrive sullo stream NetStr.Write(Bytes, 0, Bytes.Length) End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Listener.Pending Then 'Inizializza il client Client = Listener.AcceptTcpClient 'Inizializza lo stream NetStr = Client.GetStream 'Termina il controllo del timer Timer1.Stop() 'Termina l'ascolto del TcpListener Listener.Stop() 'Attiva il timer per la ricezione di dati Timer2.Start() End If End Sub Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick 'Se il client è connesso If Client.Connected Then 'Se ci sono dati da leggere, che possono essere letti If Client.Available > 0 And NetStr.CanRead Then 'PROBLEMA: client.avaible è perennemente 0 quindi la condizione è sempre falsa e non legge mai niente... 'Legge i dati come array di bytes Dim Bytes(Client.ReceiveBufferSize) As Byte 'Legge Client.ReceiveBufferSize bytes a partire dal primo 'dallo stream e li deposita In Bytes 'se ci sono bytes nulli, non verranno contati 'di Default, Client.ReceiveBufferSize = 8129 NetStr.Read(Bytes, 0, Client.ReceiveBufferSize) 'Trasforma i bytes ricevuti In stringa Dim S As String = System.Text.ASCIIEncoding.ASCII.GetString(Bytes) 'Visualizza il messaggio MsgBox(S, MsgBoxStyle.Information) End If End If End Sub End Class
|
...e questo quello del client...
Codice sorgente - presumibilmente VB.NET |
Imports System.Net.Sockets Public Class Form1 Public Client As New TcpClient Public NetStr As NetworkStream Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Se il client è connesso If Client.Connected = True Then 'Se si può scrivere sullo stream If NetStr.CanWrite Then 'Converte il messaggio In bytes Dim Bytes() As Byte = _ System.Text.ASCIIEncoding.ASCII.GetBytes(TextBox1.Text) 'E li scrive sullo stream NetStr.Write(Bytes, 0, Bytes.Length) End If End If End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 'Se il client è connesso If Client.Connected Then 'Se ci sono dati da leggere, che possono essere letti If Client.Available > 0 And NetStr.CanRead Then 'Legge i dati come array di bytes Dim Bytes(Client.ReceiveBufferSize) As Byte 'Legge Client.ReceiveBufferSize bytes a partire dal primo 'dallo stream e li deposita In Bytes 'se ci sono bytes nulli, non verranno contati 'di Default, Client.ReceiveBufferSize = 8129 NetStr.Read(Bytes, 0, Client.ReceiveBufferSize) 'Trasforma i bytes ricevuti In stringa Dim S As String = System.Text.ASCIIEncoding.ASCII.GetString(Bytes) 'Visualizza il messaggio MsgBox(S, MsgBoxStyle.Information) End If End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'Prova a connettersi al server Client.Connect("127.0.0.1", 25) Timer1.Enabled = True 'Se è avvenuta la connessione If Client.Connected = True Then 'Inizializza lo stream NetStr = Client.GetStream End If Button2.Enabled = False If Client.Connected = True Then MsgBox("Complimenti!") End If End Sub End Class
|
grazie |