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 - Vb.Net Sockets Problema IP
Forum - C# / VB.NET - Vb.Net Sockets Problema IP

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


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 19:23
Martedì, 03/06/2008
Salve! Scusate se posto in questa sezione spero sia giusta. Il mio problema è che sto scrivendo una chat in vb.net (di cui sotto il sorgente) e finquando faccio delle prove sul mio pc mettendo il mip Ip tutto funziona bene ma quando sono andato a fare delle prove con diversi miei amici nn sono riuscito a connettermi al server di nessuno di loro. Dopo numerosi tentativi, ho scoperto che facendo il ping dei loro indirizzi IP ricevo come output "Richiesta scaduta" mentre invece loro riescono a pingare il mio IP senza problemi. Mi chiedevo come è possibile ? In ogni caso ecco il codice del client...
Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net.Sockets
  2. Public Class Form1
  3.     Public Client As New TcpClient
  4.     Public NetStr As NetworkStream
  5.     Private Sub tmrGetData_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles tmrGetData.Tick
  6.         If Client.Connected Then
  7.             If Client.Available > 0 And NetStr.CanRead Then
  8.                 Dim Bytes(Client.ReceiveBufferSize) As Byte
  9.                 NetStr.Read(Bytes, 0, Client.ReceiveBufferSize)
  10.                 Dim S As String = System.Text.ASCIIEncoding.ASCII.GetString(Bytes)
  11.                 txtRicevuto.Text = S
  12.             End If
  13.         End If
  14.     End Sub
  15.     Private Sub cmdSend_Click(ByVal sender As Object, _
  16.       ByVal e As EventArgs) Handles cmdSend.Click
  17.         If Client.Connected Then
  18.             If NetStr.CanWrite Then
  19.                 Dim Bytes() As Byte = _
  20.                 System.Text.ASCIIEncoding.ASCII.GetBytes(txtSend.Text)
  21.                 NetStr.Write(Bytes, 0, Bytes.Length)
  22.             End If
  23.         End If
  24.         txtSend.Text = ""
  25.     End Sub
  26.     Private Sub cmdConnetti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConnetti.Click
  27.         Client.Connect(txtIP.Text, 4156)
  28.         If Client.Connected Then
  29.             NetStr = Client.GetStream
  30.             cmdConnetti.Text = "Disconnetti"
  31.             cmdConnetti.Name = "cmdDisconnetti"
  32.         End If
  33.     End Sub
  34. End Class



... e quello del server....
Codice sorgente - presumibilmente VB.NET

  1. Imports System.Net.Sockets
  2. Public Class Form1
  3.     Public Client As New TcpClient
  4.     Public NetStr As NetworkStream
  5.     Public Listener As New TcpListener(4156)
  6.     Private Sub tmrControlConnection_Tick(ByVal sender As Object, _
  7.       ByVal e As EventArgs) Handles tmrControlConnection.Tick
  8.         If Listener.Pending Then
  9.             Client = Listener.AcceptTcpClient
  10.             NetStr = Client.GetStream
  11.             tmrControlConnection.Stop()
  12.             Listener.Stop()
  13.             tmrGetData.Start()
  14.         End If
  15.     End Sub
  16.     Private Sub Form1_Load(ByVal sender As Object, _
  17.       ByVal e As EventArgs) Handles MyBase.Load
  18.         Listener.Start()
  19.     End Sub
  20.     Private Sub tmrGetData_Tick(ByVal sender As Object, _
  21.        ByVal e As EventArgs) Handles tmrGetData.Tick
  22.         If Client.Connected Then
  23.             If Client.Available > 0 And NetStr.CanRead Then
  24.                 Dim Bytes(Client.ReceiveBufferSize) As Byte
  25.                 NetStr.Read(Bytes, 0, Client.ReceiveBufferSize)
  26.                 Dim S As String = System.Text.ASCIIEncoding.ASCII.GetString(Bytes)
  27.                 txtReceved.Text = S
  28.             End If
  29.         End If
  30.     End Sub
  31.     Private Sub cmdSend_Click(ByVal sender As Object, _
  32.       ByVal e As EventArgs) Handles cmdSend.Click
  33.         If Client.Connected Then
  34.             If NetStr.CanWrite Then
  35.                 Dim Bytes() As Byte = _
  36.                 System.Text.ASCIIEncoding.ASCII.GetBytes(txtSend.Text)
  37.                 NetStr.Write(Bytes, 0, Bytes.Length)
  38.             End If
  39.         End If
  40.     End Sub
  41. End Class



Ho l'adsl tele2 nn so se possa servire. Scusate per il post un po lunghetto... grazie a tutti ;)!

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:05
Mercoledì, 04/06/2008
Quello sembra proprio il mio codice. L'hai preso dal mio sito?
Comunque, appare strano quello che dici. Intanto, prova a cambiare porta e disattivare il firewall (se non l'ha già fatto). Può darsi che sia quello che blocchi la connessione.

PS: ho supposto che il timer sia attivo all'avvio, è vero?

Ultima modifica effettuata da Il Totem il 04/06/2008 alle 17:06
PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:08
Mercoledì, 04/06/2008
Innanzitutto volevo complimentermi per la tua guida la trovo molto interessante e sopratutto ben organizzata, è da lì che ho cominciato e continuo lo studio del vb.net grazie. Si è vero mi hai sgamato :rotfl: il sorgente l'ho preso dal tuo sito. Comunque penso che sia apposto perché come ho gia detto aprendo client e server sul mio stesso pc riesco a farli comunicare senza alcun problema. Per quanto riguarda il firewall viene consentita l'apertura della porta(non viene disattivato in quanto pensavo fosse sufficiente aprire la porta comunque in questi giorni farò delle prove disattivandolo). Io penso che il problema sia quella maledetta "richiesta scaduta" che ricevo quando vado a pingare l'IP al quale non riesco a connettermi, mentre gli altri pingando il mio IP non ricevono alcun errore e tutto fila liscio. Siccome gli "altri" sono molti sono giunto alla conclusione che forse è un problema mio, ma nn so ripeto ho l'adsl tele2. Ho provato anche ad utilizzare un DNS(no-ip.com) ma niente. Ecco perché mi chiedevo se esistesse un modo per ovviare a questo problema, che ne so magari modificando da codice la configurazione internet (se è questo il preblema) del pc che ospita il server affiché possa ricevere connessioni in entrata. Rispondi please e grazie ancora per la disponibilità ;)!

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 23:39
Mercoledì, 04/06/2008
Molto probabilmente il problema e' dai tuoi amici.

Se il server lo attivi da un tuo amico, questo deve avere aperto la porta che utilizzate sul suo router.

PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 13:03
Giovedì, 05/06/2008
@ gantonio
grazie x la risposta ma coloro con i quali ho provato avevano tutti un modem normale...

--------------------------------------------------

Comunque ho risolto, disattivando completamente il firewall come mi hai detto tu Totem, riesco a pingare senza problemi l'Ip, e riesco a connettermi e a far funzionare il programma senza alcun problema. Però adesso mi chiedo perché non bastava consentire l'eccezione del firewall aprendo la porta, ma bisogna disattivare completamente il firewall ??????? Poi un'altra cosa se nn è possibile risolvere questo problema(di disattivare il firewall ogni volta che si vuole fare una connessione) esiste un modo per disattivarlo da codice(intendo comunque sempre quello di windows, visto che con quello si può aprire una porta dal semplice prompt dei comandi) x poi magari riattivarlo quando termina la connessione ??????

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:08
Giovedì, 05/06/2008
Buona domanda. Teoricamente basterebbe un'eccezione, che, se non ricordo male, si può aggiungere anche da codice, ma come dici tu non basta. Sinceramente non lo so: Gantonio è più esperto di me in termini di reti e socket. Comunque non credo sia possibile disattivarlo da codice, altrimenti sarebbe facilissimo scavalcarlo, no? Puoi però chiedere all'utente di disattivarlo manualmente, se proprio non riesci a trovare una soluzione.

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 18:11
Giovedì, 05/06/2008
Disattivare il firewall da codice non ha senso.

E' troppo pericoloso e sarebbero necessari diritti amministrativi che non tutti i programmi possiedono.

Una eccezione e' sufficiente. Questo vuol dire che quello che avevi fatto tu nel configurare il fw non era corretto.

PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:21
Venerdì, 06/06/2008
Continuo a non capire come mai l'eccezione non basti....Vabbè comunque grazie al vostro aiuto ho capito che la radice del problema stava nel firewall quindi il lavoro più grosso è stato fatto, adesso si tratta solo di risolvere questo piccolo problema. Grazie ancora alla prossima:k:!

PM Quote
Avatar
punkettone90 (Member)
Expert


Messaggi: 279
Iscritto: 16/05/2007

Segnala al moderatore
Postato alle 14:58
Venerdì, 06/06/2008
per via del ping il problema è dei tuoi amici che lo hanno impostato in modo che possano mandare ping ma non riceverli, per questo ti viene richiesta scaduta, perchè tu mandi il ping ma il loro firewall fa si che il loro computer non mandi la risposta il tuo pc.
comunque non c'entra il ping con la chat; il ping si basa sul protocollo ICMP mentre la comunicazione della chat è su TCP/IP, sei sicuro che i tuoi amici permettano alla tua chat di accedere alla rete? :k:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo