elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  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 3,614 veces)
iaorengo

Desconectado Desconectado

Mensajes: 6


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

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 am por iaorengo » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

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

The Dark Shadow is my passion.
Elemental Code


Desconectado Desconectado

Mensajes: 622


Im beyond the system


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

para contestarte bien a tu pregunta.

en lugar de sleep algo "parecido" es

DoEvents
En línea

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas
iaorengo

Desconectado Desconectado

Mensajes: 6


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

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
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

.
Es mejor que uses el evento:

Código
  1.  
  2. Private Sub Winsock1_Connect()
  3. ' este codigo se ejcutara cuando el Socket apenas se conecte
  4. End Sub
  5.  
  6.  

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 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Elemental Code


Desconectado Desconectado

Mensajes: 622


Im beyond the system


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

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

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

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

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


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

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
  1.  
  2. Option Explicit
  3.  
  4. Private Sub Form_DblClick()
  5.    setMyPriority ' // Seteamos a NORMAL.
  6. End Sub
  7.  
  8. Private Sub Form_Load()
  9.    '   //  THREAD_PRIORITY_NORMAL  Como solo manejasmos un solo hilo no tiene caso cambiar este.
  10.    '   //  REALTIME_PRIORITY_CLASS HAce que nos atienda mas constante el Scheduler del S.O.
  11.    setMyPriority THREAD_PRIORITY_HIGHEST, REALTIME_PRIORITY_CLASS    '   //  Establecemos prioridad en tiempo REAL.
  12. End Sub
  13.  
  14.  

En un modulo:
Código
  1.  
  2. Option Explicit
  3.  
  4. Enum PRIORYTYCLASS
  5.    ABOVE_NORMAL_PRIORITY_CLASS = &H8000
  6.    BELOW_NORMAL_PRIORITY_CLASS = &H4000
  7.    HIGH_PRIORITY_CLASS = &H80
  8.    IDLE_PRIORITY_CLASS = &H40
  9.    NORMAL_PRIORITY_CLASS = &H20
  10.    PROCESS_MODE_BACKGROUND_BEGIN = &H100000
  11.    PROCESS_MODE_BACKGROUND_END = &H200000
  12.    REALTIME_PRIORITY_CLASS = &H100
  13. End Enum
  14.  
  15. Enum PRIORYTYTHREAD
  16.    THREAD_MODE_BACKGROUND_BEGIN = &H10000
  17.    THREAD_MODE_BACKGROUND_END = &H20000
  18.    THREAD_PRIORITY_ABOVE_NORMAL = 1
  19.    THREAD_PRIORITY_BELOW_NORMAL = -1
  20.    THREAD_PRIORITY_HIGHEST = 2
  21.    THREAD_PRIORITY_IDLE = -15
  22.    THREAD_PRIORITY_LOWEST = -2
  23.    THREAD_PRIORITY_NORMAL = 0
  24.    THREAD_PRIORITY_TIME_CRITICAL = 15
  25. End Enum
  26.  
  27. Declare Function SetThreadPriority Lib "kernel32" (ByVal GetCurrentThread As Long, ByVal nPriority As Long) As Long
  28. Declare Function SetPriorityClass Lib "kernel32" (ByVal GetCurrentProcess As Long, ByVal dwPriorityClass As Long) As Long
  29. Declare Function GetCurrentThread Lib "kernel32" () As Long
  30. Declare Function GetCurrentProcess Lib "kernel32" () As Long
  31.  
  32. Public Function setMyPriority(Optional ByVal ThreadPriority As PRIORYTYTHREAD = THREAD_PRIORITY_NORMAL, Optional ByVal ClassPriority As PRIORYTYCLASS = NORMAL_PRIORITY_CLASS) As Boolean
  33.    ' (http://infrangelux.hostei.com/)
  34.    setMyPriority = SetThreadPriority(GetCurrentThread, ThreadPriority) Or _
  35.                    SetPriorityClass(GetCurrentProcess, ClassPriority)
  36. End Function
  37.  
  38.  

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

The Dark Shadow is my passion.
raul338


Desconectado Desconectado

Mensajes: 2.633


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

Código
  1. Private Sub Winsock1_Connect()
  2. ' este codigo se ejcutara cuando el Socket apenas se conecte
  3. End Sub
  4.  
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 « 1 2 »
Programación Visual Basic
-sagitari- 10 3,724 Último mensaje 4 Febrero 2006, 17:58 pm
por -sagitari-
Problema conexión Winsock
Programación Visual Basic
HJZR4 1 1,292 Último mensaje 19 Octubre 2007, 07:15 am
por Surfiction
Problema de conexión con winsock
Programación Visual Basic
jmordenata 1 1,296 Último mensaje 18 Marzo 2008, 14:22 pm
por jmordenata
Conexion Winsock
Programación Visual Basic
The_Bug 3 2,899 Último mensaje 4 Septiembre 2009, 03:40 am
por The_Bug
Contraseña en Conexion WinSock
Programación Visual Basic
CGST 1 1,517 Último mensaje 20 Febrero 2011, 06:42 am
por BlackZeroX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines