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 - NetworkStream
Forum - C# / VB.NET - NetworkStream

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 13:44
Domenica, 10/02/2013
Salve a tutti,

in questo periodo mi sto dedicando ai socket. Sto cercando di costruire un programmino (in VB.NET 2010) che manda messaggi da client a server e viceversa. Mi sono bloccato in un punto.

Dovrei mandare una scritta variabile tramite il NetworkStream dalla textbox1 del client alla textbox1 del server, e un'altra scritta (sempre variabile) dalla textbox2 del client alla textbox2 del server. Il problema è io mando da textbox1 e 2 però arrivano tutte e 2 nella textbox1 del server e non si dividono.

Mi servirebbe un codice che direbbe se la scritta ti arriva dalla textbox1 del client mettila nella textbox1 del server.
Vi prego aiutatemi voi, perchè mi sono già bloccati da giorni nel mio progetto.

Grazie in anticipo :)


PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 14:22
Domenica, 10/02/2013
implementa una specie di protocollo
aggiungi alla stringa un carattere all'inizio che indica la textbox, poi lo togli prima di mostrarlo

ho capito il tuo problema?

PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 14:08
Martedì, 12/02/2013
Ti Posto il codice cosi si capisce meglio il problema :)

I programmi funzionano che il Client all'avvio si connette in automatico al server in locale.
Il server all'avvio in automatico accetta.
Quando il server è connesso la prima cosa che fa è attivare il timer per la lettura della chat e un altro timer che sarebbe quello per mandare le informazioni del computer al client.
Il client quando è connesso anche lui attiva il timer per la lettura della chat e un altro timer che sarebbe quello per ricevere le informazioni del computer server per poi smistarle nelle determinate TextBox
esempio.

Nome Computer nella textbox1

Sistema Operativo nella textbox2

CODICE CLIENT

Imports System.Net.Sockets
Imports System.Text.UTF8Encoding

Public Class Form1
    Dim Client As TcpClient
    Dim Flusso As NetworkStream

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Client = New TcpClient
        Try
            Client.Connect("127.0.0.1", 8888)
        Catch SE As SocketException
            Timer1.Stop()
            Timer1.Start()
        End Try
        If Client.Connected Then
            Timer1.Stop()
            TextBox2.Text = TextBox2.Text & "Connessione OK" & vbCrLf
            Flusso = Client.GetStream()
            Timer2.Start()
            Timer3.Start()
        Else
            TextBox2.Text = TextBox2.Text & "Connessione fallita" & vbCrLf
            Timer1.Stop()
            Timer1.Start()
        End If
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        If Client.Available > 0 Then
            Dim Temporaneo(Client.Available - 1) As Byte
            Flusso.Read(Temporaneo, 0, Temporaneo.Length)
            Dim Testo As String = UTF8.GetString(Temporaneo)
            TextBox2.Text = TextBox2.Text & Testo & vbCrLf
        End If
    End Sub

    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        If Client.Available > 0 Then
            Dim Temporaneo1(Client.Available - 1) As Byte
            Flusso.Read(Temporaneo1, 0, Temporaneo1.Length)
            Dim Testo1 As String = UTF8.GetString(Temporaneo1)
            TextBox4.Text = TextBox4.Text & Testo1 & vbCrLf
        End If
        If Client.Available > 0 Then
            Dim Temporaneo2(Client.Available - 1) As Byte
            Flusso.Read(Temporaneo2, 0, Temporaneo2.Length)
            Dim Testo2 As String = UTF8.GetString(Temporaneo2)
            TextBox5.Text = TextBox5.Text & Testo2 & vbCrLf
        End If
        Timer3.Stop()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Temporaneo() As Byte = UTF8.GetBytes(TextBox1.Text)
        Flusso.Write(Temporaneo, 0, Temporaneo.Length)
        TextBox1.Text = ""
    End Sub
End Class

------------------------------CODICE SERVER------------------

Imports System.Net.Sockets
Imports System.Text.UTF8Encoding

Public Class Form1
    Dim Listener As TcpListener
    Dim Client As TcpClient
    Dim Flusso As NetworkStream

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Listener = New TcpListener(8888)
        Listener.Start()
        Timer1.Start()
        TextBox2.Text = TextBox2.Text & "Sono in attesa di qualcuno..." & vbCrLf
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If Listener.Pending() Then
            Timer1.Stop()
            Client = Listener.AcceptTcpClient()
            Listener.Stop()
            Flusso = Client.GetStream()
            Timer2.Start()
            Timer3.Start()
            TextBox2.Text = TextBox2.Text & "Si è connesso un utente" & vbCrLf
        End If
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        If Client.Available > 0 Then
            Dim Temporaneo(Client.Available - 1) As Byte
            Flusso.Read(Temporaneo, 0, Temporaneo.Length)
            Dim Testo As String = UTF8.GetString(Temporaneo)
            TextBox2.Text = TextBox2.Text & Testo & vbCrLf
        End If
    End Sub

    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        Dim Temporaneo1() As Byte = UTF8.GetBytes("IP Locale")
        Flusso.Write(Temporaneo1, 0, Temporaneo1.Length)
        Dim Temporaneo2() As Byte = UTF8.GetBytes("Nome Computer")
        Flusso.Write(Temporaneo2, 0, Temporaneo2.Length)
        Timer3.Stop()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Temporaneo() As Byte = UTF8.GetBytes(TextBox1.Text)
        Flusso.Write(Temporaneo, 0, Temporaneo.Length)
        TextBox1.Text = ""
    End Sub
End Class


------

Il problema sta che quando il server invia le informazioni, il client le riceve però le legge entrambe nella textbox per la chat senza spazi.


Grazie moltissimo per l'aiuto che mi state dando :)


PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 17:41
Martedì, 12/02/2013
ma nel tuo codice come fai a distinguere se i dati inviati sono per la textbox1 o la textbox2?

PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 21:18
Martedì, 12/02/2013
Io penso con il timer3 che ce nel Client

Cioè un informazione che parte dal server va alla textbox4 e l'altra informazione che parte dal server va nella textbox5...solo che il client prende tutto quello che arriva come fosse una parola che invio con la chat...sapete come potrei risolvere il problema? :)


PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 14:12
Mercoledì, 13/02/2013
P.S.

Ho provato a modificare il codice del client e a mettere nel timer --- se il testo che arriva "contains" la parola IP Locale deve essere inserito nella TextBox4 se invece il testo che arriva "contains" la parola Nome Computer deve essere inserito nella TextBox5

Solo che quando arriva mi arriva tutto nella TextBox4 così "IP LocaleNome Computer"

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 19:46
Giovedì, 14/02/2013
perchè usi millemila timer? e ripeto, con cosa dovresti distinguere i messaggi per una textbox da quelli per l'altra?
commenta il codice, please :yup:

PM Quote
Avatar
MirkoDistefano (Normal User)
Pro


Messaggi: 119
Iscritto: 10/02/2013

Segnala al moderatore
Postato alle 10:44
Venerdì, 15/02/2013
Non ne ho idea, vi prego ditemelo voi, sono troppo confuso ormai.

Che timer potrei eliminare?


PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 15:15
Sabato, 16/02/2013
ma il codice l'hai scritto premendo tasti a caso o hai idea di cosa possa servire? :_doubt:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo