none
Problema connessione tra due chat RRS feed

  • Domanda

  • Ciao a tutti ho creato una chat in linguaggio vb formata da due programmi (Client e Server) il problema è che riesco a collegare le due chat SOLO se sono collegate alla stessa rete. Quindi almeno che non si collegano entrambi i pc alla stessa wifi la chat risulta inutilizzabile e mi da quest errore "Impossibile stabilire connessione.Risposta non corretta della parte connessa dopo l'intervallo di tempo oppure mancata risposta dall'host collegato (Indirizzo IP):8888" come risolvo?
    mercoledì 5 febbraio 2014 18:01

Risposte

Tutte le risposte

  • Ciao Salvatore,

    il tuo scopo è quello di connettere in chat due PC che si 'vedono' tramite internet ?

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    mercoledì 5 febbraio 2014 18:11
    Moderatore
  • Ciao Salvatore,

    non sapendo come hai scritto il codice è difficile aiutarti.

    Banalmente però potrebbe essere che usi una porta che il tuo Firewall blocca su un accesso esterno mentre internamente funziona.

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    mercoledì 5 febbraio 2014 19:21
    Moderatore
  • Ciao Renato,

    questo è il codice che uso per il client:

    Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
            Dim indirizzo As Net.IPAddress
            If Net.IPAddress.TryParse(ToolStripTextBox1.Text, indirizzo) Then
                cliente = New TcpClient
                cliente.Connect(indirizzo, 8888)
                TextBox2.Text = TextBox2.Text & "Connessione OK!" & vbCrLf
                flusso = cliente.GetStream()
                Timer1.Start()
                ToolStripTextBox1.BackColor = Color.Green
                ToolStripMenuItem1.Enabled = False
                DisconnettiToolStripMenuItem.Visible = True
            Else
                MsgBox("Indirizzo IP errato!", MsgBoxStyle.Critical, "Attenzione!")
                ToolStripTextBox1.Text = ""
            End If
        End Sub

    e questo quello per il server:

        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            If cliente.Available > 0 Then
                Dim temporaneo(cliente.Available - 1) As Byte
                flusso.Read(temporaneo, 0, temporaneo.Length)
                Dim testo As String = UTF8.GetString(temporaneo)
                TextBox2.Text = TextBox2.Text & "Client: " & testo & vbCrLf
                My.Computer.Audio.Play("C:\Windows\Media\Windows Notify Messaging.wav", AudioPlayMode.Background)
                If testo = "Utente Disconnesso" Then
                    MsgBox("Nessun utente connesso!", MsgBoxStyle.Critical, "Utente Disconnesso")
                    Me.Close()
                End If
            End If
        End Sub

    mercoledì 5 febbraio 2014 19:41
  • Ciao Salvatore,

    nella pagina da dove, probabilmente, hai preso il tuo codice

    [GUIDA] Connettere il client al server con i sockets in vb.net

    c'è un apposito paragarafo che spiega come risolvere il problema

    Connessione remota su due computer

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    • Proposto come risposta Irina Turcu lunedì 10 febbraio 2014 13:21
    • Contrassegnato come risposta Irina Turcu giovedì 13 febbraio 2014 09:50
    mercoledì 5 febbraio 2014 20:11
    Moderatore
  • Ciao Renato,

    grazie per la guida, non ci sarebbe un modo per far tutto con i codici in modo da rendere tutto automatico? Perchè se ad esempio vorrei pubblicare il programma l'utente dovrebbe seguire la guida.

    Grazie, Ciao

    giovedì 6 febbraio 2014 07:12
  • Ciao Salvatore,

    puoi ottenere il tuo IP internet con questo codice

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            MessageBox.Show(GetExternalIp)
        End Sub
        Private Function GetExternalIp() As String
            Try
                Dim ExternalIP As String
                ExternalIP = (New System.Net.WebClient()).DownloadString("http://checkip.dyndns.org/")
                ExternalIP = (New System.Text.RegularExpressions.Regex("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")) _
                             .Matches(ExternalIP)(0).ToString()
                Return ExternalIP
            Catch
                Return Nothing
            End Try
        End Function

    Il problema che essendo dinamico può cambiare di volta in volta oppure anche durante la stessa sessione.

    I servizi come quello descritto nel documento (http://dyn.com/dns/) servono proprio per rendere statico l'indirizzo che, normalmente è dinamico.

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato


    • Modificato Irina Turcu lunedì 10 febbraio 2014 13:19 aggiustamento collegamento
    giovedì 6 febbraio 2014 15:13
    Moderatore
  • Ciao Renato,

    ti ringrazio per il codice, ma funziona solo in parte. Il server si collega ed esce scritto "Connesso" ma al client no. Il codice funziona ma credo che c'è bisogno di qualche modifica anche nel codice che "ascolta" se si connette qualcuno, io uso questo:

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
            If ascoltatore.Pending() Then
                Timer2.Stop()
                cliente = ascoltatore.AcceptTcpClient()
                ascoltatore.Stop()
                flusso = cliente.GetStream()
                Timer1.Start()
                TextBox2.Text = TextBox2.Text & "Si è connesso un utente" & vbCrLf
                DisconnettiToolStripMenuItem.Visible = True
            End If
        End Sub

    puoi aiutarmi? grazie ancora

    Ciao

    giovedì 6 febbraio 2014 17:01
  • Ciao Salvatore,

    al solito link, da cui hai già attinto, trovi tutto il codice che ti necessita con tutte le spiegazioni dei vari pezzi di programma.

    [GUIDA] Connettere il client al server con i sockets in vb.net

    se poi non ti piace quell'esempio in rete trovi decine (voglio stare stretto) di esempi di chat con VB.NET.

    Se poi non ti è chiaro qualche passaggio siamo qui per quello.

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    giovedì 6 febbraio 2014 19:24
    Moderatore
  • Ciao, 

    Non riesco a risolvere. Puoi aiutarmi? 

    venerdì 7 febbraio 2014 10:26
  • Non riesco a risolvere. Puoi aiutarmi? 

    Ciao Salvatore,

    'non riesco a risolvere' cosa ?

    come posso aiutarti senza vedere tutto il tuo codice Server e Client, le configurazioni Firewall ecc. ecc.?

    Se sulla rete locale va correttamente al 9o% il tuo è solo un problema 'sistemistico' ( permessi di firewall, NAT ecc.)

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    venerdì 7 febbraio 2014 12:46
    Moderatore
  • Ciao Salvatore,

    per curiosità ho provato a compilare il codice presente nella pagina da cui hai preso il tuo codice e tutto, seguento le indicazioni dello sviluppatore, funziona correttamente.

    Quindi :

    1) Problemi di 'configurazione rete' come indicato in precedenza

    2) Problemi di copia/personalizzazione del programma di cui sopra

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    venerdì 7 febbraio 2014 13:25
    Moderatore
  • Ciao, 

    Il codice non l'ho copiato da quel sito, dopo provo a riscrivere il server seguendo quel sito e provo.

    Grazie, ciao

    venerdì 7 febbraio 2014 14:03
  • Ciao Renato, 

    Ho riscritto il codice come nel sito aggiungendo questo

    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            MessageBox.Show(GetExternalIp)
        End Sub
        Private Function GetExternalIp() As String
            Try
                Dim ExternalIP As String
                ExternalIP = (New System.Net.WebClient()).DownloadString("http://checkip.dyndns.org/")
                ExternalIP = (New System.Text.RegularExpressions.Regex("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")) _
                             .Matches(ExternalIP)(0).ToString()
                Return ExternalIP
            Catch
                Return Nothing
            End Try
        End Function

    Le chat funzionano solo se collegate alla stessa rete.. sono al punto di partenza!! Soluzioni? 

    sabato 8 febbraio 2014 06:20
  • Ciao Salvatore,

    se hai preso il codice dal sito in questione così come è hai provato a seguire i passi indicatiper la connessione Extranet? Se si probabilmente hai problemi di impostazione di Firewall che impediscono la connessione sulla selezionata

    Quanto al mio codice se lo hai usato così come te lo ho postato

    MessageBox.Show(GetExternalIp)

    non ci fai molto devi integrarlo nel tuo programma. ma prima vedi se riesci a farlo funzionare in modalità 'standard' così come previsto dall'autore.

    E poi debug, debug, debug non mi stancherò mai di scriverlo  ... dire non funziona nulla non porta da nessuna parte!

    Ciao


    Renato Marzaro  MVP Visual Basic

    http://community.visual-basic.it/renato

    sabato 8 febbraio 2014 15:36
    Moderatore