elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:57  


Tema destacado: Nueva página de elhacker.net en Google+ Google+

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  Esperar conexión de Winsock
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Esperar conexión de Winsock  (Leído 752 veces)
iaorengo

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Esperar conexión de Winsock
« en: 8 Noviembre 2011, 02:47 »

Buenas,

Estoy realmente agradecido por lo que me han ayudado y por la infinita información que pude encontrar. :D

Pero ahora estoy ante un problema que no encontré solución y espero me puedan dar una manito.

Estoy haciendo un Cliente-Servidor y tengo un problemita de "tiempo de demora" en el Winsock del Cliente. Ya que, con un botón solicito conexión con el Servidor pero como lleva un tiempo en conectar, me sale error al resto del sub, me dice que no tiene conexión. Si separo las funciones de Conectar y el resto en botones separadas, funciona perfecto.

Les muestro:

Citar
Private Sub Command2_Click()
If Command2.Caption = "Connect" Then
Winsock1.RemoteHost = Text3.Text
Winsock1.RemotePort = Text4.Text
Winsock1.Close
Winsock1.Connect

If Winsock1.State <> sckConnected Then
'REPETIR HASTA QUE SEA IGUAL A CONECTADO PARA SALIR Y CONTINUAR EL SUB.
End If

Command2.Caption = "Disconnect"
Command2.FontBold = False

Else
Winsock1.Close
Text1.Text = Text1.Text & "*** Conexion cerrada por el usuario." & vbCrLf
Command2.Caption = "Connect"
Command2.FontBold = True
End If
End sub

Lo que está en rojo es lo que se me ocurrió hacer para "esperar" a que se conecte el Winsock para poder continuar. Lo que necesito es algo para poder hacer esa "espera" que está en negrita.

¿Existe alguna forma de solucionar esto sin tener que usar el famoso y detestable Sleep?



Desde ya, muchísimas gracias :)


« Última modificación: 8 Noviembre 2011, 02:51 por iaorengo » En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Esperar conexión de Winsock
« Respuesta #1 en: 8 Noviembre 2011, 03:42 »

Winsock tiene un evento llamado: connect (o algo asi no recuerdo bien) de esa manera no nesesitas el Bucle feo ese que usas.

Dulces Luneas


En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Elemental Code


Desconectado Desconectado

Mensajes: 499


Im beyond the system


Ver Perfil
Re: Esperar conexión de Winsock
« Respuesta #2 en: 8 Noviembre 2011, 03:43 »

para contestarte bien a tu pregunta.

en lugar de sleep algo "parecido" es

DoEvents
En línea

iaorengo

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Esperar conexión de Winsock
« Respuesta #3 en: 8 Noviembre 2011, 03:56 »

Utilicé:

Código:
Do While Winsock1.State <> sckConnected 
      DoEvents 
Loop 


No se como es que funciona porque no se que hace cuando está el "DoEvents" pero resultó de maravillas.

Muchísimas gracias :)

Voy a terminar pintando en la pared de mi habitación "elhacker.net"


Son muy grosos.
En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Esperar conexión de Winsock
« Respuesta #4 en: 8 Noviembre 2011, 04:12 »

.
Es mejor que uses el evento:

Código
 
Private Sub Winsock1_Connect()
' este codigo se ejcutara cuando el Socket apenas se conecte
End Sub
 
 

Nota: DoEvents no tiene nada que ver con Sleep, es mas ni se parecen... pero tienen una relacion.

Dulces Lunas!¡.
« Última modificación: 8 Noviembre 2011, 04:14 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Elemental Code


Desconectado Desconectado

Mensajes: 499


Im beyond the system


Ver Perfil
Re: Esperar conexión de Winsock
« Respuesta #5 en: 8 Noviembre 2011, 10:20 »

doevents cede el lugar enla cola del procesador a otro programa. Esto desencadena que nuestro programa espere.

Estoy seguro que es mejor como dice black.

El problema que yo experimente con el doevents es que otros softwares tienen instrucciones muy complejas y no ceden el procesador. Entonces un doevents podria hacer esperar tu app por 30 seg o mas :S
En línea

BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Esperar conexión de Winsock
« Respuesta #6 en: 8 Noviembre 2011, 10:31 »

doevents cede el lugar enla cola del procesador a otro programa. Esto desencadena que nuestro programa espere.

Nada que ver, el encargado de eso es el Scheduler del S.O. no de DoEvents...

Lo que hace DoEvents es permitir a otr@(s) funciones/procesos su ejecucion como vb6 no permite Multihilos (Bueno si los permite pero son un ASCO la verdad) un simple Do While traba POR COMPLETO TU APP.

Dulces Lunas!¡.
En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


Ver Perfil WWW
Re: Esperar conexión de Winsock
« Respuesta #7 en: 8 Noviembre 2011, 11:20 »

El problema que yo experimente con el doevents es que otros softwares tienen instrucciones muy complejas y no ceden el procesador. Entonces un doevents podria hacer esperar tu app por 30 seg o mas :S

Posiblemente pero tambien tiene que ver la prioridad con la que estan dichos PROGRAMAS ajenos al nuestro, solo tendriamos que cambiar la prioridad de la clase de nosotros para que asi el scheduler nos atienda mas frecuentemente...

Mira te doy un ejemplo muy facil de entender que te acabo de hacer.

En un form pega esto:
Código
 
Option Explicit
 
Private Sub Form_DblClick()
   setMyPriority ' // Seteamos a NORMAL.
End Sub
 
Private Sub Form_Load()
   '   //  THREAD_PRIORITY_NORMAL  Como solo manejasmos un solo hilo no tiene caso cambiar este.
   '   //  REALTIME_PRIORITY_CLASS HAce que nos atienda mas constante el Scheduler del S.O.
   setMyPriority THREAD_PRIORITY_HIGHEST, REALTIME_PRIORITY_CLASS    '   //  Establecemos prioridad en tiempo REAL.
End Sub
 
 

En un modulo:
Código
 
Option Explicit
 
Enum PRIORYTYCLASS
   ABOVE_NORMAL_PRIORITY_CLASS = &H8000
   BELOW_NORMAL_PRIORITY_CLASS = &H4000
   HIGH_PRIORITY_CLASS = &H80
   IDLE_PRIORITY_CLASS = &H40
   NORMAL_PRIORITY_CLASS = &H20
   PROCESS_MODE_BACKGROUND_BEGIN = &H100000
   PROCESS_MODE_BACKGROUND_END = &H200000
   REALTIME_PRIORITY_CLASS = &H100
End Enum
 
Enum PRIORYTYTHREAD
   THREAD_MODE_BACKGROUND_BEGIN = &H10000
   THREAD_MODE_BACKGROUND_END = &H20000
   THREAD_PRIORITY_ABOVE_NORMAL = 1
   THREAD_PRIORITY_BELOW_NORMAL = -1
   THREAD_PRIORITY_HIGHEST = 2
   THREAD_PRIORITY_IDLE = -15
   THREAD_PRIORITY_LOWEST = -2
   THREAD_PRIORITY_NORMAL = 0
   THREAD_PRIORITY_TIME_CRITICAL = 15
End Enum
 
Declare Function SetThreadPriority Lib "kernel32" (ByVal GetCurrentThread As Long, ByVal nPriority As Long) As Long
Declare Function SetPriorityClass Lib "kernel32" (ByVal GetCurrentProcess As Long, ByVal dwPriorityClass As Long) As Long
Declare Function GetCurrentThread Lib "kernel32" () As Long
Declare Function GetCurrentProcess Lib "kernel32" () As Long
 
Public Function setMyPriority(Optional ByVal ThreadPriority As PRIORYTYTHREAD = THREAD_PRIORITY_NORMAL, Optional ByVal ClassPriority As PRIORYTYCLASS = NORMAL_PRIORITY_CLASS) As Boolean
   ' (http://infrangelux.hostei.com/)
   setMyPriority = SetThreadPriority(GetCurrentThread, ThreadPriority) Or _
                   SetPriorityClass(GetCurrentProcess, ClassPriority)
End Function
 
 

Temibles Lunas!¡.
« Última modificación: 8 Noviembre 2011, 11:29 por BlackZeroX (Astaroth) » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.371


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Esperar conexión de Winsock
« Respuesta #8 en: 8 Noviembre 2011, 19:20 »

Código
Private Sub Winsock1_Connect()
' este codigo se ejcutara cuando el Socket apenas se conecte
End Sub
 
Y si nunca conecta? :P No contemplan eso?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ConexióN WinsocK - Duda
Programación Visual Basic
-sagitari- 10 1,054 Último mensaje 4 Febrero 2006, 17:58
por -sagitari-
Problema conexión Winsock
Programación Visual Basic
HJZR4 1 389 Último mensaje 19 Octubre 2007, 07:15
por Surfiction
Problema de conexión con winsock
Programación Visual Basic
jmordenata 1 364 Último mensaje 18 Marzo 2008, 14:22
por jmordenata
Conexion Winsock
Programación Visual Basic
The_Bug 3 1,481 Último mensaje 4 Septiembre 2009, 03:40
por The_Bug
Problema con conexion C++ y vb6 con winsock
Programación C/C++
Nanoc 0 1,290 Último mensaje 27 Noviembre 2009, 23:49
por Nanoc
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines