Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: iaorengo en 10 Julio 2011, 05:35 am



Título: Identificación de Sockets
Publicado por: iaorengo en 10 Julio 2011, 05:35 am
Buenas noches a todos :)

Tengo unos problemitas que son como detalles, pero estos detalles no me dejan continuar con mi proyecto. La verdad, agradezco enormemente por lo que me han ayudado hasta acá :)

Espero me puedan ayudar con esto y espero sea lo último también :P


Tengo ya una especie de chat multiconexión con servidor que funciona de 10. En el servidor, cada User que se conecta lo hace con un nick que se agrega a una listbox.
Ej:
Carlitos
Pedrito
Flor
Mica
Tomy

Claramente cada uno fue conectado a un socket diferente, ¿cómo puedo saber qué socket está usando en ese momento cada uno? Es decir, si desde el servidor deseara desconectarlo, ¿cómo se a quién le mando la orden de desconectar? Porque dudo que con winsock1(Pedrito).close funcione :P

Otra duda relacionada es, ¿se puede listar todos los sockets activos y detectar cuáles son y a qué usuario pertenecen?


Bueno, eso es todo por ahora y espero que hasta siempre.
Ya leí algunas guías de Winsock pero casi todas son de MonoConexiones por lo que lo hace inutil. Y las que trataban de multiconexion era básicamente sobre el envio de datos... ninguna hablaba de sockets y su manejo.

Muchas gracias... si sale libero :D


Título: Re: Identificación de Sockets
Publicado por: Sanlegas en 10 Julio 2011, 07:55 am
Me imagino que estas usando un array de sockets... bien si es asi puedes usar el index de cada evento, por ejemplo el del DataArrival y agregar el index al listbox, mas o menos asi...

Código
  1. Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)
  2. Dim Nombre As String
  3. Winsock1(Index).GetData Nombre
  4. List1.AddItem Nombre, Index  'Se agrega el nombre y el index del socket a la lista
  5. End Sub

y cuando quieras mandar X dato a X nombre usas el index del listbox

Código
  1. Winsock1(List1.ListIndex).SendData Datos

para saber que sockets estan conectados puedes poner un timer que recorra todos los sockets y comprobar si esta conectados

Código
  1. Private Sub Timer1_Timer()
  2. dim N as long
  3. for N = lbound(Winsock1) to ubound(Winsock1)
  4.        if Winsock1(N).State = 7 then List1.AddItem N  'si esta conectad agregamos solo el index a la lista o haces lo que quieras xP
  5. next
  6. End Sub
  7.  

veras que es muy facil si lo entiendes, salu2  :P