Error de conexión con mi herramienta de administracion remota (sckError)

Iniciado por Snort, 10 Octubre 2006, 20:19 PM

0 Miembros y 2 Visitantes están viendo este tema.

Snort

   Wenas, estaba haciendo mi herramienta de administracion remota con conexion inversa en visual basic 6, con la api del winsock, para poder usarla en cualqier pc, pero al ponerle el cliente a conectar, el estado del socket (lo pone en la ventana del vb) es "sckConnecting" y al poco tiempo (1 segundo, si llega), el estado es de "sckError", y evidentemente, no se le conecta con el server :( :( :(
   No se porqe ocurre esto, pero bueno pues por si me podeis ayudar, aqi os dejo los codigos:

El cliente:
Dim WithEvents ws As CSocketMaster

Private Sub Form_Load()
On Error Resume Next
Set ws = New CSocketMaster
ws.CloseSck
ws.Protocol = sckTCPProtocol
ws.RemotePort = "5121"
ws.RemoteHost = "127.0.0.1"
ws.Connect
End Sub

Private Sub Timer1_Timer()
If ws.State = 7 Then
Label2.Caption = "Conectado"
Else
Label2.Caption = "Desconectado"
End If
End Sub

Private Sub Ws_ConectionRequest(ByVal requestID As Long)
ws.CloseSck
ws.Accept requestID
Label4.Caption = ws.RemoteHostIP
End Sub



El server:
Dim WithEvents ws As CSocketMaster
Dim filesize As Long, datos2 As String, filedata As String, send As Boolean, path As String

Private Sub Form_Load()
On Error Resume Next
ws.CloseSck
ws.Protocol = sckTCPProtocol
ws.LocalPort = "5121"
ws.Listen
End Sub

Private Sub Timer1_Timer()
If ws.State = 7 Then
Label1.Caption = "Conectado"
Else
Label1.Caption = "Desconectado"
End If
End Sub

Private Sub ws_ConnectionRequest(ByVal requestID As Long)
ws.CloseSck
ws.Accept requestID
End Sub


   Saludos, y espero qe me podais ayudar, graxias ;)

PD: Esta claro qe al troyano le falta mucho code, pero no lo he puesto porqe no es necesario, para no liar.

<--v1c1ous-->

Primero que el sckError es comun:

Intenta conectar, cuando no puede, salta sckError, intenta conectar de vuelta, cuando no puede salta sckError y asi...

Y segundo, la parte que esta a la escucha acepta la conexión, la otra no, solo se conecta.

Cliente:
Citar
Option Explicit
Dim WithEvents ws As CSocketMaster
Private Sub Form_Load()
Set ws = New CSocketMaster
ws.CloseSck
ws.Connect Client.LocalIP, 5121
End Sub

Servidor:
Citar
Option Explicit
Dim WithEvents ws As CSocketMaster

Private Sub Form_Load()
Set ws = New CSocketMaster
ws.CloseSck
ws.Bind 5121
ws.Listen
End Sub

Private Sub ws_ConnectionRequest(ByVal requestID As Long)
ws.CloseSck
ws.Accept requestID
End Sub


Si cuando el Cliente intenta conectar y salta error queres que vuelva a intentarlo, simple:


Citar
Private Sub ws_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)
ws.CloseSck
ws.Connect Client.LocalIP, 5121
End Sub

O bien:

Citar
Private Sub Timer_Coneccion_Timer()
If Not ws.State = sckConnected Then
ws.CloseSck
ws.Connect Client.LocalIP, 5121
End If
End Sub



Snort

   Claro, pero asi lo qe haria es intentar conectar, luego dar error, y enseguida volver a intentar conectar, inmediatamente otra vez error... y asi sin parar hasta qe se cierre el cliente, no?
   Asi solo conseguiria reintentar la conexion, acabo de proavr y no se conecta, la conexion sigue dando error. Muchas gracias por la respuesta, pero sigue sin conectarse, reintenta i reintenta pero no lo consigue... Porqe?

<--v1c1ous-->

Estas haciendo algo mal, mire el codigo y no tiene nada malo, y para no complicarte lo probe para ver si realmente no me fallaba la vista y me anda perfectamente.

Tuve un error te tipeo en el cliente donde puse Client.LocalIP iria ws.LocalIP pero imagino que te salto el error y lo arreglaste.

-Crea los dos nuevos proyecto.
-Agrega el Modulo modSocketMaster.bas.
-Agrega el ModuloClass CSocketMaster.cls.
-Guarda los dos proyectos.
-Copia los respectivos codigo que hice (Cliente y Servidor).

Y tiene que funcionarte perfectamente.

Y fijate tu Firewall :)


Snort

   Woow, no me digas qe te expliqe porqe, pero ahora lo qe le pasa (mas raro aun) es qe se conecta cuando le apetece unicamente, (El firewall siempre desactivado claro) teniendo los dos proyectos abiertos, ejecuto ambos, y no pasa nada, cierro vuelvo ejecutar (sin cambiar absolutamente nada)y alomejor si alomejor no (¿? :huh:), pero la historia no acaba ahi, si no qe cuando si qe se conecta, unicamente me pone en el label2 del form del cliente "conectado" y en el label del server tambien, pero no me sale la ip por ejemplo en el label4 del cliente, y tampoco me deja trasnferir archivos, o mandar mensajes entre ambas aplicaciones. Lo ultimo ya es qe donde ponia lo de sckError o sckconnecting, ahora, cuando se conectaen cada ventana del vb6 (ambos proyectos) me pone FD_WRITE y un numero (Nunca me he podido conectar con la api, por tanto no tengo ni idea). Ej (FD_WRITE 804, FD_WRITE 976, FD_WRITE 1044, FD_WRITE 796, FD_WRITE 736...)

   Bueno pues muchiiiisimas gracias por sus respuestas

PD: Ah por cierto si suando estan conectados cierras el server, en el cliente pone deconectado, pero si al estar conectado se cierra el cliente, en el server sigue ponindo conectado y en el vb FD_WRITE y el nº.

Saludos y gracias otra vez...

<--v1c1ous-->

Bueno, a ver, primero unas aclaraciones:

-Todos los comandos que te aparescan impresos en la consola de VB los imprime la API, asi que simplemente si no sabes que quieren decir buscalos dentro del codigo.

-Nunca me hizo ningun pitido este API, no es WinSock.

- FD_WRITE 804, FD_WRITE 976, FD_WRITE 1044, FD_WRITE 796, FD_WRITE 736 etc, es lo que aparece cuando se transmiten/reciven datos.
Por ejemplo:
FD_READ lo imprime la funcion PostSocket solo para avisar que esta leyendo datos.
No son errores, solo informacion.



Y ahora, vos pediste que te hagan funcionar el codigo que posteaste, y asi fue, ese codigo como bien dijiste es muy vago, para que conecte primero tenes que abrir el Servidor para que escuche y despues el Cliente que se conecte, de otra forma no anda. ¿Por que? Simple, mira:

SERVIDOR escucha<-->CLIENTE conecta
Si el SERVIDOR no escucha<--> el CLINETE no tiene a quien conectar y no lo intenta mas.


Proba, si primero ejecutas el Servidor, despues el Cliente te va a conectar perfectamente, de lo contrario, quedara tratando de conectar sin respuesta.

¿Como se soluciona?

En el servidor:
Para que vuelva a escuchar si falla la conexión o se cierra.

Citar
Private Sub ws_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)
ws.CloseSck
'Escuhar
End Sub

Citar
Private Sub ws_CloseSck()
ws.CloseSck
'Escuhar
End Sub

En el Cliente:
Para que vuelva a conectar si falla la conexión o se cierra y sepa si esta o no conectado para volver a intentar si no lo logro.

CitarPrivate Sub ws_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)
ws.CloseSck
'Conectar
End Sub

CitarPrivate Sub ws_CloseSck()
ws.CloseSck
'Conectar
End Sub

CitarPrivate Sub Timer_Coneccion_Timer()
If ws.State = sckConnected Then
'Conectado
Else
'Desconectado
'Conectar
End If
End Sub

De esta forma tiene que andar PERFECTA la conexión.

Si no te funciono ¿Que podes intentar?:

-Baja de otra parte el Modulo y el Modulo Class dek Socket(Puede que esten modificados).

-Intenta con otro puerto

-Fijate de tener:

En las declaraciones Globales:
CitarOption Explicit
Dim WithEvents ws As CSocketMaster

Y cuando inicia el Form:
CitarSet ws = New CSocketMaster


Snort

   Ei hotmail_pop3, tio eres el amo, ya lo he conseguido conectar, si se cierra el cliente o el servidro y se vuelve a abrir se vuelve a establecer la conexion, he conseguido enviar datos de caja de texto a caja de texto, aunqe no archivos, me revisare el codigo de mandar archivos.
   El problema estaba en qe lo estaba haciendo de conexion inversa y mientras el cliente escuchaba y el servidor se conectaba, en el codigo estaba todo mareao, ambos se conectaban y escuchaban, lo qe creaba conflictos errores i de todo.
   Lo estoy pasando a conexion inversa, aver si hay suerte y ya me rula bien...

   Gracias  ;)