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
Todo las sugerencias son aceptadas.....ha y nos se si usar 4 winsocks
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
Código [Seleccionar]
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