Salve a tutti..
sto scrivendo scrivendo un programma che deve rimanere in ascolto sulla porta 1027 di un server che tramite telefono riceve informazioni da altri apparati remoti.Ora quando premo il pulsante di connessione avviene la connessione all'IP e alla porta indicati, verifico che la connessione sia attiva e passo il controllo alla SUB Timer_Tick, la quale se ho ben capito , esegue il codice fino al Timer.Stop. In questo tempo ricevo il flusso dal server, lo decodifico, e lo salvo in un file temporaneo in modo da poterlo leggere subito dopo riga per riga. In questo modo aggiungo le righe come record in un DB di Access alla fina cancello il file temporaneo.
Ora quando premo il pulsante, effettuata la connessione, dovrebbe scaricare i dati dal server e poi rimanere in attesa di altri dati. In realtà mi scarica il primo flusso di dati, poi se il server riceve altre informazioni, quindi il buffer è carico, non avviene più nessuna attività, a meno che non premo nuovamente il pulsante di connessione !!!
Cosa c'è che non va ??
grazie a tutticodice:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call connetti() End Sub Public Sub connetti() Dim AddressIP As String = TextBox1.Text 'Metto l'ip dentro ad AddressIP Centrale = New TcpClient 'Centrale è un nuovo client Centrale.Connect(AddressIP, Porta) 'Connetti Centrale all'indirizzo ip indirizzo attraverso la porta xxxx If Centrale.Connected Then 'Se Centrale è connesso allora... (cioè se il server è in ascolto) flusso = Centrale.GetStream() 'flusso è l’invio/ricezione (Stream) di dati con il server al quale Centrale è connesso Timer1.Start() 'Avvio Timer1 Else 'Altrimenti... TextBox3.Text = TextBox3.Text & "Il server non risponde!" & vbCrLf 'Scrivo in TextBox3 End If 'Fine se End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click On Error Resume Next Centrale.Close() 'Chiudo la connessione TextBox3.Text = TextBox3.Text & "Il server è disconnesso!" & vbCrLf 'Scrivo in TextBox3 x = 0 'Timer1.Stop() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = Str(x) If Centrale.Connected Then ToolStripStatusLabel1.Text = "Connesso al Server: " & TextBox1.Text & " sulla porta:" & TextBox2.Text If Centrale.Available > 0 Then 'Se i dati che ricevi dal server al quale è connesso Centrale sono disponibili e sono maggiori di 0 x = x + 1 ToolStripStatusLabel1.Text = "...ricezione dati..." Dim temp(Centrale.Available - 1) As Byte 'Dichiaro un array con dimensioni uguali al numero di dati ricevuti da Centrale meno 1 flusso.Read(temp, 0, temp.Length) 'Leggo il flusso di dati Dim testo As String = UTF8.GetString(temp) 'Decodifica temp in stringa UTF8 e mettila in testo My.Computer.FileSystem.WriteAllText(FileTMP, testo & vbCrLf, True) ' scrivo sul file l'output della centrale TextBox3.Text = TextBox3.Text & My.Computer.FileSystem.ReadAllText(FileTMP) ' leggo dal file e popolo la TextBox If File.Exists(FileTMP) Then Dim oRead As System.IO.StreamReader Dim stringasql As String ConnessioneDB.Open() ' Apro la connessione al DB oRead = File.OpenText(FileTMP) ' Leggo il contenuto del file di testo While oRead.Peek <> -1 testo = oRead.ReadLine ' Leggo una riga per volta del file di testo If Len(testo) > 0 Then ' se la riga non è vuota la scrivo nel DB stringasql = "Insert into Flusso(Messaggio) values('" & testo & "')" Comando = New OleDbCommand(stringasql, ConnessioneDB) Comando.ExecuteNonQuery() End If End While oRead.Close() ' chiudo il file di testo ConnessioneDB.close() ' chiudo la connessione al DB File.Delete(FileTMP) ' cancello il file di testo End If End If ' Fine se Else ToolStripStatusLabel1.Text = "Disconnesso" Timer1.Stop() End If 'Centrale.Close() End Sub

Rispondi quotando