como hacer un chat para varios pc's

Iniciado por agutin1983, 15 Septiembre 2005, 15:41 PM

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

agutin1983

hola todos!!! estoy tratando de hacer un chat tipo MSN que todos los clientes lo instalen en su pc y yo un servidor que se conecten a mi. ahora bien, solo lo he podido hacer con dos pc,para ello he usado winsock. la mia(servidor) la pongo en "listen", y al cliente le doy mi numero de ip para que se conecte. listo, se establece la conexion(tcp) entre los 2 equipos y se pueden enviar y recibir mensajes.
ahora lo que quiero hacer es que haya mas de 2 pc siendo uno el servidor y todas las demas cliente, que c/u me envie mensajes a mi y yo me encargo de enviarle el mensaje a todos. es posible hacer eso con winsock. si quieren el codigo que tengo pidanmelo. escucho ideas.

BeRti

eso tiene muy facil solucion, simplemente creas una matriz de controles del socket del servidor para que acepte mas de una solicitud de conexion.
Lo unico mayor que el amor a la libertad es el odio, el odio a kien te la kita!

agutin1983

muy buena la idea! seria como poner unos cuantos objetos winsock en el formulario y dejarlos en "listen" hasta que un clientes pida conexion. pero de esta manera ¿solo habria un cupo limitado de conexiones? por ej: si hago una matriz de control de 5 winsock, solo podria establecer conexion con 5 clientes, cuando el 6 quiera conectar no va a poder.

Manibal_man

Si estableces una variable para el numero de matriz lo solucionas, por ej:

Winsock(a)

Saludos
:: I was born ready motha fucka ::

BeRti

si, justo como te indica Manibal_man puedes apañarlo perfectamente.
Lo unico mayor que el amor a la libertad es el odio, el odio a kien te la kita!

agutin1983

exacto. pero si creo una matriz con 10 elementos por ej. y una variable :
for a=1 to 10
winsock(a)
next a

mas de 10 conexiones no voy a poder tener.
que opinana?

Manibal_man

pero xq lo vas a limitar a 10?

porque no haces un ciclo con un

a + 1

y listo...
:: I was born ready motha fucka ::

BeRti

yo de todas formas flipo con la gente, que vaga que es. tanto kuesta mirar este mismo foro? arribita justo pone en un post fijo TUTORIAL WINSOCK,  te copio y pego... joder



Aceptar más de una solicitud de conexión

El servidor básico comentado anteriormente sólo acepta una solicitud de conexión. No obstante, es posible aceptar varias solicitudes de conexión con el mismo control si crea una matriz de controles. En este caso, no necesita cerrar la conexión; basta con crear una nueva instancia del control (estableciendo la propiedad Index) e invocar el método Accept de la nueva instancia.

El código que se muestra a continuación presupone que existe un control Winsock en un formulario llamado sckServer y que su propiedad Index tiene el valor 0, por lo que el control forma parte de una matriz de controles. En la sección Declaraciones se declara una variable intMax a nivel de módulo. En el evento Load del formulario, intMax tiene establecido el valor 0 y la propiedad LocalPort del primer control de la matriz tiene el valor 1001. Después, se invoca el método Listen en el control, convirtiéndolo en el control "que escucha". A medida que llega cada solicitud de conexión, el código comprueba si el índice es 0 (el valor del control "que escucha"). Si es así, este control aumenta la variable intMax y utiliza ese número para crear una nueva instancia del control. Esta instancia se utiliza para aceptar la solicitud de conexión.



Código:
Private intMax As Long

Private Sub Form_Load()
   intMax = 0
   sckServer(0).LocalPort = 1001
   sckServer(0).Listen
End Sub

Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
   If Index = 0 Then
      intMax = intMax + 1
      Load sckServer(intMax)
      sckServer(intMax).LocalPort = 0
      sckServer(intMax).Accept requestID
      Load txtData(intMax)
   End If
End Sub


Lo unico mayor que el amor a la libertad es el odio, el odio a kien te la kita!

agutin1983

mi duda es:
hay que crear la matriz con una cantidad determinada de elementos por ej: winsock(0) hasta winsock(100) o se pueden ir agregando en tiempo de ejecucion?

Manibal_man

:: I was born ready motha fucka ::