Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Manibal_man en 13 Junio 2005, 21:18 pm



Título: Pregunta sobre winsock.
Publicado por: Manibal_man en 13 Junio 2005, 21:18 pm
Buenas... antes que nada quiero aclarar que VB no es mi lenguaje... de hecho nunca lo use mas que para algun que otro tutorial pero no viene al caso...

La pregunta en si es esta.. necesito saber si un determinado puerto en determinado ip esta abierto, en el caso que lo este que aparezca ON y sino OFF

Entonces x lo que estuve viendo creo una conexión con winsock1.connect  (al ip y al puerto que quiero comprobar)

y estaba intentando crear una condicion con el resultado de winsock1.getdata datos, pero me tira un error 40006. me podrian decir que estoy haciendo mal? o bien, cual seria el camino mas correcto para esto que necesito.

Muchas gracias x adelantado
(perdonen lo escueto del post, pero estoy laburando y no la puedo colgar mucho)

Saludos


Título: Re: Pregunta sobre winsock.
Publicado por: p0w3r f1y en 13 Junio 2005, 22:14 pm
Pues no lo sé, la verdad, como no pongas el código no puedo ayudarte, pero te diré que en principio no deberías recibir ningún error, ya que, si el puerto está abierto, el winsock conectaría, y no habría ningún problema, y si el puerto no está abierto, simplemente no conectaría, pero no debería dar ningún error.... (al menos mi experiencia me dice eso... :))
Salu2


Título: Re: Pregunta sobre winsock.
Publicado por: byebye en 13 Junio 2005, 22:47 pm
 mira la descripcion de el error (los numeros se asocian al error).


Título: Re: Pregunta sobre winsock.
Publicado por: sch3m4 en 13 Junio 2005, 23:06 pm
para saber si está abierto no necesitas recibir datos, solo conectar, por lo que el evento no sería Winsock1_DataArrival, sino Winsock1_Connect


Título: Re: Pregunta sobre winsock.
Publicado por: Manibal_man en 13 Junio 2005, 23:29 pm
ok, entiendo lo que me dicen todos, pero la pregunta seria... una vez que conecto.. cual seria la condicion que se tiene que cumplir para verificar que el puerto este abierto?

por ejemplo, usar
winsock1.getdata Var
Código:
If Var <> 0 (o lo que devuelva al conectar) Then
Text1.text = ON
Ifelse Var = 0 Then
Text1.text = 0
EndIf

Entienden a que apunto?, codigo en si no tengo, es solo esto un poco mas armado solo para que compile... pero no se si ese el modulo que tengo que usar para comprobar si el puerto esta abierto o no...

Yo lo que necesito saber es que Winsock1.XXXXX tengo que usar despues de usar el Winsock1.connect para que me devuelva un valor con el que yo pueda comprobar si el puerto esta abierto o no... no me importa conectarme, solo quiero saber si esta abierto

(para los que preguntaron que error especificamente es el 40006 "Wrong protocol or connection state for the requested transaction or request, y el debugger me marca:
Código:
Winsock1.GetData datos

Muchisimas gracias a todos again


Título: Re: Pregunta sobre winsock.
Publicado por: byebye en 14 Junio 2005, 00:23 am
en que parte del codigo estas poniendo el getdata? eso sera pq intentas leer de un socket que no esta conectado.

en el sub error del winsock te marca el numero y descripcion del error, si no conecta te marcara en el lo que necesitas saber.


Título: Re: Pregunta sobre winsock.
Publicado por: Manibal_man en 14 Junio 2005, 16:56 pm
pero tengo que usar GetData?... o como tomo el valor que me retorna la funcion winsock para chequear si conecto?


Título: Re: Pregunta sobre winsock.
Publicado por: en 14 Junio 2005, 17:04 pm
 ;) Hola manibal_man creo que el problema que te indica es simplemente que intentas hacer algo y eso depende del control winsock y como no hay conexion o simplemente no te puede responder te bota ese error , ami me he pasado , de echo cada vez que me tira el error de wornh protocol suele ser por eso , espero que te sirva de ayuda , un salu2.


Título: Re: Pregunta sobre winsock.
Publicado por: Manibal_man en 14 Junio 2005, 17:27 pm
pero nadie sabria decirme como controlo si esta conectado o no?

o bien una forma de chequear si el puerto esta abierto?!?!

saludos


Título: Re: Pregunta sobre winsock.
Publicado por: en 14 Junio 2005, 19:17 pm
Pues te cojes y en la aplicación cliente agregas un command , y 2 texbox , la texbox1 es para el host y la text2 para el puerto , tambien añades un label al proyecto y por ultimo añades un control winsock .

---Cliente---

Código:
Private Sub Command1_Click()
sock.Connect Text1.Text, 1127
End Sub


Private Sub sock_Close()
Label1.Caption = "Desconectado"
End Sub

Private Sub sock_Connect()
Label1.Caption = "Conectado"
End Sub

NOTA del Cliente: Puedes cambiar el nombre del winsock a tú gusto , y el puerto , nombre de controles , etc.

----Servidor----



Código:
Private Sub Form_Load()
sock.LocalPort = "1127"
sock.Listen
End Sub

Private Sub sock_ConnectionRequest(ByVal requestID As Long)
sock.Close
sock.Accept requestID
End Sub


Espero que ya con esto lo soluciones y te quedes con lo que he echo que es demasiado simple OK ? enga salu2.


Título: Re: Pregunta sobre winsock.
Publicado por: __LoG26 en 14 Junio 2005, 19:18 pm
Te voy a responder segun lo que entendi.

Para conectarte a un IP con Puerto especifico lo que tienes que hacer es poner en Winsock1_Connect () Winsock1.SendData Winsock1.RemoteHost, Winsock1.RemotePort y para saber si no conecto usas Winsock1_Error(ByVal Number....

Un Saludo... ;D


Título: Re: Pregunta sobre winsock.
Publicado por: Slasher-K en 14 Junio 2005, 20:11 pm
Simplemente utilizas el método Connect, si se produce el evento Connect es porque se pudo conectar.

Saludos.


Título: Re: Pregunta sobre winsock.
Publicado por: Manibal_man en 14 Junio 2005, 20:24 pm
Muchas gracias a todos... estaba entrando para decir que ya habia encontrado que lo que tenia que hacer era verificarlo con el metodo Connect(), que era exactamente lo que preguntaba...

igualmente Aililia, muchas gracias xq todavia me faltaba encontrar que metodo usaba al cerrarse... y con tu ejemplo termine de tenerlo todo en claro.

muchas gracias a todos de nuevo gente :D

Saludos