klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/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 |
Imports System.Net.Sockets Public Class Form1 Public Client As New TcpClient Public NetStr As NetworkStream Private Sub tmrGetData_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles tmrGetData.Tick If Client.Connected Then If Client.Available > 0 And NetStr.CanRead Then Dim Bytes(Client.ReceiveBufferSize) As Byte NetStr.Read(Bytes, 0, Client.ReceiveBufferSize) Dim S As String = System.Text.ASCIIEncoding.ASCII.GetString(Bytes) txtRicevuto.Text = S End If End If End Sub Private Sub cmdSend_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles cmdSend.Click If Client.Connected Then If NetStr.CanWrite Then Dim Bytes() As Byte = _ System.Text.ASCIIEncoding.ASCII.GetBytes(txtSend.Text) NetStr.Write(Bytes, 0, Bytes.Length) End If End If txtSend.Text = "" End Sub Private Sub cmdConnetti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConnetti.Click Client.Connect(txtIP.Text, 4156) If Client.Connected Then NetStr = Client.GetStream cmdConnetti.Text = "Disconnetti" cmdConnetti.Name = "cmdDisconnetti" End If End Sub End Class
|
... e quello del server....
Codice sorgente - presumibilmente VB.NET |
Imports System.Net.Sockets Public Class Form1 Public Client As New TcpClient Public NetStr As NetworkStream Public Listener As New TcpListener(4156) Private Sub tmrControlConnection_Tick(ByVal sender As Object, _ ByVal e As EventArgs) Handles tmrControlConnection.Tick If Listener.Pending Then Client = Listener.AcceptTcpClient NetStr = Client.GetStream tmrControlConnection.Stop() Listener.Stop() tmrGetData.Start() End If End Sub Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load Listener.Start() End Sub Private Sub tmrGetData_Tick(ByVal sender As Object, _ ByVal e As EventArgs) Handles tmrGetData.Tick If Client.Connected Then If Client.Available > 0 And NetStr.CanRead Then Dim Bytes(Client.ReceiveBufferSize) As Byte NetStr.Read(Bytes, 0, Client.ReceiveBufferSize) Dim S As String = System.Text.ASCIIEncoding.ASCII.GetString(Bytes) txtReceved.Text = S End If End If End Sub Private Sub cmdSend_Click(ByVal sender As Object, _ ByVal e As EventArgs) Handles cmdSend.Click If Client.Connected Then If NetStr.CanWrite Then Dim Bytes() As Byte = _ System.Text.ASCIIEncoding.ASCII.GetBytes(txtSend.Text) NetStr.Write(Bytes, 0, Bytes.Length) End If End If End Sub End Class
|
Ho l'adsl tele2 nn so se possa servire. Scusate per il post un po lunghetto... grazie a tutti ! |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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 |
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/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 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à !
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
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.
|
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/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 ??????
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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.
|
|
gantonio (Normal User)
Guru^2
Messaggi: 1532
Iscritto: 09/09/2007
|
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.
|
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/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!
|
|
punkettone90 (Member)
Expert
Messaggi: 279
Iscritto: 16/05/2007
|
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?
|
|