Mensajero lan Con winsock

Iniciado por 5v5, 9 Junio 2006, 16:43 PM

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

5v5

Buen dia...Nuevamente por aki...saludos a todos...

Bueno mi duda es sobre un mensajero lan con winsock..bueno mi problema es que no se cuantos Winsock debe de tener para realizar el mensajerito...jejeje

Mi planteamiento es el siguiente, es lo que pretendo hacer pero aun no lo he logrado hacer del todo...espero me den unos cuantos consejos....

Estructura Actual.-

3 controles winsock (WinsockUDP,Winsock1,  Winsock2 () )
cajas de texto y un list box.-

Winsock1 siempre a la escucha

Funcionamiento-

1.- El WinsockUDP esta en escucha, dicho WinsockUDP manda un BroadCast mandando un su nombre de usuario por ejemplo

WinsockUDP.sendData (WinsockUDP.Localhostname & "#Usu#")

2.- Al recibir en WinsockUDP el pakete Broadcast en WinsockUDP_DataArrial(...)

recibe y crea un Winsock1(nuevosocket) y Este nuevo socket solicita una conexion al Winsock1 Al recibir el conection_recuest(..) del Winsock1 este Winsock1 crea un nuevo Winsock2(Nuevosock) y acepta la conexion....

Cuando el Winsock2(nuevosock) creado por el Winsock1, establece el Connection..este Winsock2(nuevosock) manda su nombre de usuario con sendata....para que dicho usuario que se conecto lo agregue a su lista

este es el code que tengo pero no fuenciona del todo....esepro me haya medio explicado




Private Sub Form_Load()
On Error Resume Next
Dim Usuario_Udp1 As String
WinSockUDP.Bind
Winsock1.Close
Winsock1.Listen

Usuario_Udp1 = WinSockUDP.LocalHostName & "#Usu#"
WinSockUDP.RemoteHost = "255.255.255.255"

WinSockUDP.SendData Usuario_Udp1



End Sub
Private Sub WinSockUDP_DataArrival(ByVal bytesTotal As Long)
Dim DatosUdp As String
Dim Usuario_Udp As String
WinSockUDP.GetData DatosUdp


Select Case Len(DatosUdp) >= 0

      Case Right(DatosUdp, 5) = "#Usu#"

           
        If Not Usuario_Udp = Winsock1.LocalHostName Then
                 
                   
            numSocket = NuevoSocket
            Winsock2(numSocket).RemoteHost Usuario_Udp
            Winsock2(numSocket).Close
            Winsock2(numSocket).Connect
                   
        End If
                   
    End Select


End Sub
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Dim numSocket As Integer 'el numero del socket

'creamos un nuevo socket
numSocket = NuevoSocket
'aceptamos la conexion con el nuevo socket
Winsock2(numSocket).Accept requestID

End Sub
Private Sub Winsock2_Connect(Index As Integer)
'Me.Caption = "Cliente" & "   -   " & "¡ Conexion Establecida !"
'Me.B_Conectar.Caption = "Desconectar"
Enviar_Datos Winsock2(Index).LocalHostName & "#Usu#", Index


End Sub
Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As Long)

'variable para guardar los datos
Dim Datos As String
'obtenemos los datos y los guardamos en una variable

Winsock2(Index).GetData Datos

Select Case Len(Datos) >= 0
 
      Case Right(Datos, 5) = "#Usu#"
               
                User(Index) = (Left(Datos, Len(Datos) - 5))
                Me.Actuliza_Lista
                       
      Case Else
               
  '             Success = FlashWindow(Me.hwnd, 1)
   
    End Select

End Sub

Private Sub Winsock2_Close(Index As Integer)
'cierra la conexion

Winsock2(Index).Close
User(Index) = ""
Me.Actuliza_Lista


End Sub
Private Sub Winsock2_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)
'cerramos la conexion
Winsock2(Index).Close
'mostramos informacion sobre el error

MsgBox "Error numero " & Number & ": " & Description, vbCritical

End Sub
Private Function NuevoSocket() As Integer

Dim numElementos As Integer 'numero de sockets
Dim i As Integer 'contador

'obtiene la cantidad de Winsocks que tenemos
numElementos = Winsock2.UBound
'recorre el arreglo de sockets

For i = 0 To numElementos
'si algun socket ya creado esta inactivo
'utiliza este mismo para la nueva conexion
        If Winsock2(i).State = sckClosed Then

            NuevoSocket = i 'retorna el indice

            Exit Function 'abandona la funcion

         End If

Next


'si no encuentra sockets inactivos
Load Winsock2(numElementos + 1) 'carga un nuevo socket al arreglo
'devuelve el nuevo indice
NuevoSocket = Winsock2.UBound

End Function


Sub Actuliza_Lista()

Me.Lista_Contactos.Clear
   
    For i = 0 To UBound(User)

      If User(i) <> "" Then Me.Lista_Contactos.AddItem User(i)
         
    Next i


End Sub



Sub Enviar_Datos(Datos_a_Enviar As String, Indice As Integer, Optional Origen As String)
 
  Dim Mensage As String
 
 
      If Origen = "Boton_Enviar" Then
     
                Mensage = Datos_a_Enviar
               
      Else
     
       
                Mensage = Datos_a_Enviar
   
     
      End If
     
   Winsock2(Indice).SendData Mensage

End Sub




Todo las sugerencias son aceptadas.....ha y nos se si usar 4 winsocks