23/11/09 16:46
oretovalley
Ciao a tutti stavo, studiando la guida scritta da Totem's Lair(colgo l'occasione per ringraziarlo perchè è fatta benissimo), tornando al mio problema non riesco a capire perchè non riesco a far dialogare server e client, ho seguito perfettamente la guida postata creando per il server un form con una textbox, 2 timer e un button con questo codice:
Nel client ho creato due button e una textbox e un timer con questo codice:
ma non riescono a dialogare ora mi chiedo dov'è l'errore?
Imports System.Net.Sockets Public Class Form1 Public Client As 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 'Esiste anche una versione di Start che accetta come parametro 'il massimo numero di connessioni accettabili 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 If Client.Connected 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 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 '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
Nel client ho creato due button e una textbox e un timer con questo codice:
Imports System.Net.Sockets Public Class Form1 Public Client As 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) 'Se è avvenuta la connessione If Client.Connected = True Then 'Inizializza lo stream NetStr = Client.GetStream End If End Sub End Class
ma non riescono a dialogare ora mi chiedo dov'è l'errore?
aaa