Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/06/2011, 06:57
Avatar de servantsoftware
servantsoftware
 
Fecha de Ingreso: abril-2011
Ubicación: 1 Pedro 4.11
Mensajes: 94
Antigüedad: 13 años, 9 meses
Puntos: 3
Pregunta Conexion Un servidor y 10 Clientes, Parte 1 (Winsock)

Hola que tal amigos, como les dije estoy haciendo un control ciber, y ya alcanzó su primera fase (1), ahora quiero ir a la realidad, que idea o como podríamos hacer para convertir un form en un servidor y 10 clientes individuales, que solo tengan la opción de mandar un texto, pero que el servidor los atienda a todos individualmente?

Miren ya tengo el método de como hacer para que se puedan conectar múltiples clientes a mi servidor: publicare el código fuente, ya que es ejemplo de una web:

Todos los que ayuden y aporten para este proyecto saldrán en Agradecimientos, pero sobre todo estaré agradecido yo.

Cliente:

Código:
Private Sub CommandXP1_Click()
Winsock1.SendData Text2.Text & vbCrLf


Text1.SelStart = Len(Text1.Text)

Text1.Text = Text1.Text & "Cliente >" & Text2.Text & vbCrLf

Text1.SelStart = Len(Text1.Text)

Text2.Text = ""
End Sub

Private Sub CommandXP2_Click()
Winsock1.RemoteHost = Text3.Text

Winsock1.RemotePort = Text4.Text

Winsock1.Close

Winsock1.Connect
End Sub

Private Sub CommandXP3_Click()
'cierra la conexion

Winsock1.Close


'desplegamos un mensaje en la ventana

Text1.Text = Text1.Text & "*** Conexion cerrada por el usuario." & vbCrLf



'desplazamos el scroll

Text1.SelStart = Len(Text1.Text)
End Sub

Private Sub Form_Load()
Text1.Text = W.LocalIP 'Añadimos la ip al menu
End Sub

Private Sub Winsock1_Close()
Winsock1.Close
Text1.SelStart = Len(Text1.Text)

Text1.Text = Text1.Text & "*** Conexion cerrada por el servidor***" & vbCrLf

Text1.SelStart = Len(Text1.Text)

End Sub

Private Sub Winsock1_Connect()
Text1.Text = Text1.Text & "*** Conexion establecida ***" & vbCrLf
Text1.SelStart = Len(Text1.Text)

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Buffer As String 'variable para guardar los datos


'obtenemos los datos y los guardamos en una variable

Winsock1.GetData Buffer


'apuntamos al final del contenido del TextBox e

'insertamos los nuevos datos obtenidos

Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido

Text1.Text = Text1.Text & "Servidor >" & Buffer 'mostramos los datos

Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido

End Sub

Private Sub Winsock1_Error(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

Winsock1.Close


'mostramos informacion sobre el error

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


End Sub
Imagen Cliente:

OJO, la imagen solo es para ejemplo ya que es obio que no es el servidor del control ciber.



.................................................. ...........................................

servidor:

Código:
'Carga un nuevo socket al arreglo y devuelve su indice

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

'crea uno nuevo y devuelve su identidad

Load Winsock2(numElementos + 1) 'carga un nuevo socket al arreglo


'devuelve el nuevo indice

NuevoSocket = Winsock2.UBound

End Function



Private Sub CommandXP1_Click()
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 el socket se encuentra conectado...

If Winsock2(i).State = sckConnected Then

'enviamos el contenido de Text2

Winsock2(i).SendData Text2.Text & vbCrLf


'apuntamos al final del contenido del TextBox e

'insertamos los nuevos datos obtenidos

Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido

Text1.Text = Text1.Text & "Sock" & i & ":Servidor >" & Text2.Text & vbCrLf 'mostramos los datos

Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido

End If

Next

'borramos Text2

Text2.Text = ""

End Sub

Private Sub CommandXP2_Click()
'cierra la conexion

WinsockP.Close

'desplegamos un mensaje en la ventana

Text1.SelStart = Len(Text1.Text)

Text1.Text = Text1.Text & "*** Conexion cerrada por el usuario ***" & vbCrLf

Text1.SelStart = Len(Text1.Text)

End Sub

Private Sub CommandXP3_Click()
'cerramos cualquier conexion previa

WinsockP.Close

'asignamos el puerto local que abriremos

WinsockP.LocalPort = Text3.Text


'deja el socket esuchando conexiones

WinsockP.Listen


'desplegamos un mensaje en la ventana

Text1.SelStart = Len(Text1.Text)

Text1.Text = Text1.Text & "*** Escuchando conexiones ***" & vbCrLf

Text1.SelStart = Len(Text1.Text)
End Sub
Private Sub CommandXP9_Click()
Text1.Text = ""
End Sub

Private Sub Form_Load()
Text1.Text = W.LocalIP 'Añadimos la ip al menu
End Sub

Private Sub WinsockP_Close()
'cierra la conexion

WinsockP.Close

'desplegamos un mensaje en la ventana

Text1.SelStart = Len(Text1.Text)

Text1.Text = Text1.Text & "*** Conexion cerrada por el Cliente." & vbCrLf

Text1.SelStart = Len(Text1.Text)

End Sub

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


'mostramos un mensaje en la ventana

Text1.SelStart = Len(Text1.Text)

Text1.Text = Text1.Text & "*** Peticion numero " & requestID & vbCrLf

Text1.SelStart = Len(Text1.Text)


'creamos un nuevo socket

numSocket = NuevoSocket


'aceptamos la conexion con el nuevo socket

Winsock2(numSocket).Accept requestID


'desplegamos un mensaje en la ventana

Text1.SelStart = Len(Text1.Text)

Text1.Text = Text1.Text & "Sock" & numSocket & ":*** Conexion aceptada, listo para interactuar ***" & vbCrLf

Text1.SelStart = Len(Text1.Text)

End Sub

Private Sub WinsockP_Error(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

WinsockP.Close


'mostramos informacion sobre el error

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

End Sub

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

Winsock2(Index).Close


'desplegamos un mensaje en la ventana

Text1.SelStart = Len(Text1.Text)

Text1.Text = Text1.Text & "Sock" & Index & ":*** Conexion cerrada por el Cliente." & vbCrLf

Text1.SelStart = Len(Text1.Text)

End Sub

Private Sub Winsock2_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim Buffer As String 'variable para guardar los datos


'obtenemos los datos y los guardamos en una variable

Winsock2(Index).GetData Buffer


'apuntamos al final del contenido del TextBox e

'insertamos los nuevos datos obtenidos

Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido

Text1.Text = Text1.Text & "Sock" & Index & ":Cliente >" & Buffer 'mostramos los datos

Text1.SelStart = Len(Text1.Text) 'coloca el cursor al final del contenido

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
Imagen servidor:



.................................................. .................................................. ....

Como puedo hacer para que el servidor atienda a cada cliente individualmente, es decir como mandarle mensajes a los clientes individual mentey como hacer o saber para que los clientes vayan siendo: 1,2,3,4,5,6,7,8,9,10 osea para que el servidor pueda dectectar.


si saben lo que es un control ciber sabrán de lo que hablo sin problemas, Gracias, no lo puedo hacer solo ayudenme