Problemas Winsock

Iniciado por jesuss2012, 26 Marzo 2012, 13:29 PM

0 Miembros y 1 Visitante están viendo este tema.

jesuss2012

Estoy desesperado y no se por donde tirar,

He creado una aplicación cliente/servidor con el control Winsock e internamente en mi red funciona todo correctamente.

El problema, es que he de utilizarlo para conectar un PC externo a mi red y el mío, y no consigo que funcione. No llega a conectarse.

He redirigido el puerto con el que trabajo (que es el 1008) con el NAT en el router (también lo he probado con otros).

Lo curioso es que he probado de que el PC externo se conecte mediante el Hyperterminal al Hyperterminal de mi PC mediante TCP y a través del puerto 1008 y se conectan correctamente. Así que entiendo que el problema no es de redireccionamiento.

Por si acaso he desactivado el Firewall de Windows y el de mi antivirus y nada de nada.

No se si alguien se ha encontrado en la misma situación o puede orientarme por donde mirar.

Zorrohack

Muestra el código a ver como lo estas haciendo
Progresamos porque hay Millones de imbeciles, maldicion jodi a McAfee,Panda,Kav,Norton, perdonen solo practicaba.

jesuss2012

#2
Gracias por responder,

La aplicación es más larga pero la he recortado a lo más básico, extraido de un ejemplo que funciona correctamente, pero solo en red.

En el programa CLiente Text3 contiene la dirección IP del servidor y Text4 el puerto.
En el programa Servidor Text6 contiene el puerto.

Código en el programa Cliente:

Private Sub Conectar_Click()
Winsock1.RemoteHost = Text3.Text
Winsock1.RemotePort = Text4.Text
Winsock1.Close
Winsock1.Connect
End Sub

Private Sub Winsock1_Close()
Winsock1.Close
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "Conexion cerrada por el servidor." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Winsock1_Connect()
Text1.Text = Text1.Text & _ "Conexion establecida." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Buffer As String
Winsock1.GetData Buffer
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
Text1.Text = Text1.Text & "Servidor >" & Buffer 'mostramos los datos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Winsock1.Close
MsgBox "Error numero " & Number & ": " & Description, vbCritical
End Sub

Código en el programa Servidor:

Private Sub Escuchar_Click()
Winsock2.Close
Winsock2.LocalPort = Text6.Text
Winsock2.Listen
Text4.SelStart = Len(Text4.Text)
Text4.Text = Text4.Text & "Escuchando conexiones." & vbCrLf
Text4.SelStart = Len(Text4.Text)
End Sub

Private Sub Winsock1_Close()
Winsock1.Close
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "Conexion cerrada por el Cliente." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "*** Peticion numero " & requestID & vbCrLf
Text1.SelStart = Len(Text1.Text)
Winsock1.Close
Winsock1.Accept requestID
Text1.SelStart = Len(Text1.Text)
Text1.Text = Text1.Text & "Conexion aceptada, listo para interactuar." & vbCrLf
Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Buffer As String 'variable para guardar los datos
Winsock1.GetData Buffer
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
Text1.Text = Text1.Text & "Cliente >" & Buffer 'mostramos los datos
Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
Winsock1.Close
MsgBox "Error numero " & Number & ": " & Description, vbCritical
End Sub

Zorrohack

#3
En primer lugar El Servidor es el que se conecta(Connect), mientras que el Cliente espera la conexión(Listen), verifica bien en Port Fowarding del Router es donde se configuran las redirecciones


Servidor
Código (vb) [Seleccionar]
If Winsock1.State <> 7 Then
  Winsock1.Close
  Winsock1.Connect Text3.Text, Text4.Text
End If


Cliente
Código (vb) [Seleccionar]
Winsock1.LocalPort = Text6.Text
Winsock1.Listen


Asi no debe haber ningun problema, ademas si no estas usando no-ip.com, pues deberias estar unsando el DNS del mismo Router, no se si sabes lo que es DNS
Progresamos porque hay Millones de imbeciles, maldicion jodi a McAfee,Panda,Kav,Norton, perdonen solo practicaba.

$Edu$

En realidad es Cliente-Servidor, vs diras que es Servidor-Cliente por algunas herramientas que hacen eso para que el que abra los puertos sea el cliente y no los servidores, pero en este caso te conviene usar Servidor-Cliente si, ya que lo que parece el error es que TU abriste los puertos pero no la otra pc. El servidor, este del lado que este, es el que escucha por el puerto que se le indica, asi que donde este la parte que escucha el puerto es la que tiene que tener abierto los puertos.

jesuss2012

Está claro que lo del Cliente / Servidor el concepto está al revés de como lo pensaba, pero en definitiva uno escucha y el otro se conecta. Yo tengo los puertos redireccionados en el que escucha, pero por si acaso también están redireccionados en el que se conecta, aunque entiendo que no es necesario.

Por si sirve de pista, recuerdo que he realizado la misma operación con el Hyperterminal y me ha funcionado correctamente, uno esperando llamada y el otro llamando, y que ha nivel de mi propia red las dos aplicaciones realizan su cometido bien.

He modificado el software según Zorrohack pero sigue persistiendo el mismo error.
"Error 10061:Se ha forzado el rechado de la conexión"


BlackZeroX

#6
Cita de: Zorrohack en 26 Marzo 2012, 17:50 PM
En primer lugar El Servidor es el que se conecta(Connect), mientras que el Cliente espera la conexión(Listen), verifica bien en Port Fowarding del Router es donde se configuran las redirecciones

Hasta donde yo se...

Servidor: Es aquel que presta los servicios...
Cliente: El que usa los servicios...

Existen Dos Tipos de conexiones:

* Normal (cliente se conecta al servidor)
* Inversa: (el servidor se conecta al cliente)

* Si no se realizan las conexión seguramente tengas que abrir y re-dirrecionar el puerto a la PC del App que tiene el puerto en escucha, y abrir los puertos en este equipo segun tus firewall.




Para probar tus conexiones Via Remota puedes usar: InfrAngeluX-ScanX (Permite la conexión y enviar datos a cualquier IP y puerto remoto).

* Prueba tu puerto con este enlace (Debes poner el puerto en escucha y ejecutarlo desde el equipo donde tienes el App ejecutando):
::::-> http://infrangelux.sytes.net/scanx/?port=1008&msg=Hola%20Mundo

* Si quieres probar el puerto desde otra red usa el paremtro IP...
::::-> http://infrangelux.sytes.net/scanx/?ip=www.google.com.mx&port=1008&msg=Hola%20Mundo




Si estas bajo una Red NAT de la cual no tienes acceso a manipular comunicate con tu ISP (la empresa que te ofrece el servicio)...

Enlaces de Interes: EJEMPLOS de Cliente-Servidor

Dulces Lunas!¡.
The Dark Shadow is my passion.

rembolso

hace mucho tenia el mismo problema, pero no era  winsock era el ruter. Desactiva el cortafuegos del ruter y habilitalo para recibir conexiones . a mi e me soluciono.

jesuss2012

Muchas gracias a todos por vuestras respuestas.
Finalmente he encontrado el problema y era efectivamente los cortafuegos del maldito antivirus.