Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

[VB] Winsock con mas conexiones

Participa en el tema [VB] Winsock con mas conexiones en el foro Programación.
Hola que tal tengo una consulta Estoy creando un programa cliente/servidor, y conecta todo sin ...

Buscar en este tema:
 
  •  
    #1 [VB] Winsock con mas conexiones
    Hola que tal
    tengo una consulta

    Estoy creando un programa cliente/servidor, y conecta todo sin problemas........

    Pero cuando conecto y cierro el programa cliente, lo vuelvo a abrir, conecto, el cliente se cae, por que seguramente ya tiene tomada la conexion primera el servidor. No se de que manera decir en el servidor que cuando el cliente se salga, el servidor cierre la secion y se ponga en escucha nuevamente. Si lo hago de forma manual, apago la escucha, y pongo de nueva activa la escucha, el programa funciona, por lo que es ese el problema.

    El codigo de mi programa servidor:


    Private Sub Command1_Click()
    Winsock1.LocalPort = "1820" ' puerto a esuchar
    Winsock1.Listen 'comienza escucha
    Command1.Enabled = False
    Command2.Enabled = True

    End Sub

    Private Sub Command2_Click()
    Winsock1.Close
    Command1.Enabled = True
    Command2.Enabled = False
    Label1.Caption = " "
    End Sub

    Private Sub Command3_Click()
    End


    End Sub

    Private Sub Form_Load()
    Winsock1.Close ' Al iniciar cierra conexiones abiertas

    End Sub


    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    Winsock1.Close
    Winsock1.Accept requestID
    Label1.Caption = "El equipo remoto esta conectado"

    End Sub

    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim datos As String
    Winsock1.GetData datos 'Recibe los datos y lo guarda
    Label4.Caption = datos 'Muestra lo que recibe

    Select Case datos ' Hacemos un Select C. a la variable

    Case "pc1"
    Shell "C:\wakeforlan\lanstartCMD.exe 00-19-D1-3B-XX-XX", vbMaximizedFocus

    Case "pc2"
    Shell "C:\wakeforlan\lanstartCMD.exe 00-0A-E6-C1-X-XX", vbMaximizedFocus

    End Select


    End Sub



    En general es un programita que estoy haciendo aqui en la pega, para hacer wake for lan desde afuera.. ya que el router no lo permite

    He tratado de hacerlo con un contador en winsock() pero no me resulta xD
    si alguien me hecha una manito con el codigo se lo agradeceria

    Gracias!
    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/840783-vb-winsock-con-mas-conexiones.html
    | Más
  • #2 Re: Winsock con mas conexiones

    No se bien como usar el winsock pero vos en el form_load
    Private Sub Form_Load()
    Winsock1.Close
    End Sub


    pero en que momento o evento lo volves a abrir ?

    Ademas donde pusiste un Winsock1.connect ?
    Me gusta este mensaje
  • #3 Re: Winsock con mas conexiones

    En general, un servidor tiene un socket que permanentemente está escuchando conexiones entrantes, y cada vez que recibe una, la delega a otro socket y sigue escuchando. En tu caso, cuando el socket recibe una conexión, se cierra (deja de escuchar) y acepta la conexión.
    Cuando esta conexión se cierra (porque el cliente se cierra o por lo que sea), el socket no vuelve a escuchar. Simplemente se queda cerrado.
    Básicamente hay dos soluciones: o dejas el socket siempre escuchando y delegás las conexiones a otro socket, o hacés que el socket se ponga a escuchar cuando se cierra la conexión. La primer alternativa te permite tener varios clientes conectados al mismo tiempo, pero es más complicada. La segunda alternativa es más simple, pero a lo sumo puede haber un cliente conectado a la vez.

    Originalmente publicado por HeavenMight Ver mensaje
    Ademas donde pusiste un Winsock1.connect ?
    Subió sólo el código del servidor.
    Me gusta este mensaje
  • #4 Re: Winsock con mas conexiones

    Hay solucion mas efectiva con respecto a lo que ya tenes, pero no te la hago por que es mono conexion, es decir simultaneamente no puede haber dos conexiones... Por eso te arme esta otra que admite muchas conexiones simultaneamente.

    Solo tenes que crear una matriz de controles del winsock
    ¿como?
    copia el winsock y pegalo y te va a preguntar si queres crear una matris de controles y le das SI... y al objeto nuevo que se creo "Wincosk1(1)" lo eliminas....

    Código:
    Dim UltimoIndex As Integer
    
    Private Sub Command1_Click()
    Winsock1(0).LocalPort = "1820" ' puerto a esuchar
    Winsock1(0).Listen 'comienza escucha
    Command1.Enabled = False
    Command2.Enabled = True
    End Sub
    
    Private Sub Command2_Click()
    Winsock1(0).Close
    Command1.Enabled = True
    Command2.Enabled = False
    Label1.Caption = " "
    End Sub
    
    Private Sub Form_Load()
    Winsock1(0).Close ' Al iniciar cierra conexiones abiertas
    End Sub
    
    Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    UltimoIndex = UltimoIndex + 1               'Cargo un nuevo index a mi variable de control
    Load Winsock1(UltimoIndex)                  'Cargo un nuevo objeto winsock para manejar esta conexion
    Winsock1(UltimoIndex).Close                 'Cierro el socket
    Winsock1(UltimoIndex).Accept requestID      'Lo acepto
    Label1.Caption = UltimoIndex & " - El equipo remoto esta conectado"
    End Sub
    
    Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Dim datos As String
    Winsock1.GetData datos 'Recibe los datos y lo guarda
    Label4.Caption = datos 'Muestra lo que recibe
    
    Select Case datos ' Hacemos un Select C. a la variable
    
    Case "pc1"
    Shell "C:\wakeforlan\lanstartCMD.exe 00-19-D1-3B-XX-XX", vbMaximizedFocus
    
    Case "pc2"
    Shell "C:\wakeforlan\lanstartCMD.exe 00-0A-E6-C1-X-XX", vbMaximizedFocus
    
    End Select
    End Sub
    
    Private Sub Winsock1_Error(Index As Integer, 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)
    Label1.Caption = "Salto error: " & Index & " | " & Number
    End Sub
    
    Si se conecta y se desconecta eso fue una conexion, y solo va a soportar la cantidad de numeros soportados por un integer osea un poco mas de 32.000 despues te va a tirar error de overflow... Podes acomodar el codigo y poner un vector para verificar si un socket esta abierto para usarlo sin volver a cargar uno nuevo... pero si te compligas directamente usa "UltimoIndex" como long y listo y ahi son millones de conexiones
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 3 RESPUESTAS
  • 1883 VISTAS
  • 4 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB