Pregunta sobre winsock.

Iniciado por Manibal_man, 13 Junio 2005, 21:18 PM

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

Manibal_man

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
:: I was born ready motha fucka ::

p0w3r f1y

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

byebye

 mira la descripcion de el error (los numeros se asocian al error).

sch3m4

para saber si está abierto no necesitas recibir datos, solo conectar, por lo que el evento no sería Winsock1_DataArrival, sino Winsock1_Connect
SafetyBits

"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..

Manibal_man

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
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: Winsock1.GetData datos

Muchisimas gracias a todos again
:: I was born ready motha fucka ::

byebye

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.

Manibal_man

pero tengo que usar GetData?... o como tomo el valor que me retorna la funcion winsock para chequear si conecto?
:: I was born ready motha fucka ::

 ;) 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.
el tiempo pondrá a cada uno en su lugar

Manibal_man

pero nadie sabria decirme como controlo si esta conectado o no?

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

saludos
:: I was born ready motha fucka ::

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---

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----



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.
el tiempo pondrá a cada uno en su lugar