Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: agutin1983 en 15 Septiembre 2005, 15:41 pm



Título: como hacer un chat para varios pc's
Publicado por: agutin1983 en 15 Septiembre 2005, 15:41 pm
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.


Título: Re: como hacer un chat para varios pc's
Publicado por: BeRti en 15 Septiembre 2005, 16:47 pm
eso tiene muy facil solucion, simplemente creas una matriz de controles del socket del servidor para que acepte mas de una solicitud de conexion.


Título: Re: como hacer un chat para varios pc's
Publicado por: agutin1983 en 15 Septiembre 2005, 21:29 pm
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.


Título: Re: como hacer un chat para varios pc's
Publicado por: Manibal_man en 15 Septiembre 2005, 21:32 pm
Si estableces una variable para el numero de matriz lo solucionas, por ej:

Código:
Winsock(a)

Saludos


Título: Re: como hacer un chat para varios pc's
Publicado por: BeRti en 15 Septiembre 2005, 22:13 pm
si, justo como te indica Manibal_man puedes apañarlo perfectamente.


Título: Re: como hacer un chat para varios pc's
Publicado por: agutin1983 en 16 Septiembre 2005, 15:10 pm
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?


Título: Re: como hacer un chat para varios pc's
Publicado por: Manibal_man en 16 Septiembre 2005, 15:57 pm
pero xq lo vas a limitar a 10?

porque no haces un ciclo con un

a + 1

y listo...


Título: Re: como hacer un chat para varios pc's
Publicado por: BeRti en 16 Septiembre 2005, 16:01 pm
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


Código:
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




Título: Re: como hacer un chat para varios pc's
Publicado por: agutin1983 en 19 Septiembre 2005, 22:00 pm
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?


Título: Re: como hacer un chat para varios pc's
Publicado por: Manibal_man en 19 Septiembre 2005, 23:29 pm
nop


Título: Re: como hacer un chat para varios pc's
Publicado por: scugat en 16 Octubre 2005, 12:36 pm
tu puedes ir agregando nuevos sockets a medida que transcurre el programa por cierto el codigo de arriba ta very mal este rula bien. como an dicho solo tienes que krear un array
en form load
Código:
ws(0).localport=90 'le asignamos un puerto al primer socket 
ws(0).listen 'escuxamos en el primer socket
en conection request
Código:
if index=0 then 'comprovamos si es el primer socket para no sumar en el contador 
max=0
else
max=max +1 'si no es el primero le sumamos 1 al contador de sockets
end if
ws(index).close 'cerramos el puerto de la peticion
ws(index).accept requestid 'aceptamos la coexion
load ws(index+1) ' cargamos el socket siguiente
ws(index+1).localport= 90 'le asignamos puerto el socket siguiente
ws.(index+1).listen 'escuxamos en el socket siguiente

esto ara que la primera conexion tenga de index 0 la segunda 1 la tercera 2 ....
asi asta 65000 creo que era el tope
asi tu ya tenes varias conexiones facil e ::)
si te fijas cada condicion del winsock trae el index as integer
asi que quando recibas datos tenes que mirar de que conexion
ws(index).getdata datos
i pa enviar a tos simplemente un bucle
Código:
for i=0 to max 'ojo no index pk imaginate que el index es 2 del que a enviao el mensaje i ay 2 conexiones por delante
if ws(i).state=7 then 'miramos si ta conectao pk si el 2 se va i no ay sto se jode todo
ws(i).senddata datos 'enviamos datos a cada conexion
end if
next i


Título: Re: como hacer un chat para varios pc's
Publicado por: MaLkAvIaN_NeT en 16 Octubre 2005, 21:41 pm
Citar
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.
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


Título: Re: como hacer un chat para varios pc's
Publicado por: sch3m4 en 16 Octubre 2005, 21:58 pm
también cuando se cierre un socket podeis descargarlo... xD

Código:
unload Winsock(index)


Título: Re: como hacer un chat para varios pc's
Publicado por: Luk2006 en 26 Febrero 2006, 20:54 pm
Yo te puedo ayudar y podriamos hacer algo juntos, sé de MSNChats, fui Guide ahi y tengo toda la info que necesitas, es más tengo un servidor arriba http://www.freewebs.com/daleinicio/ con chats oficiales, se puede agregar Admins, Sysops y Guides, vamos a lo nuestro, yo te ayudo si a cambio vos me ayudas con la pagina, osea si sabes algo de php apache mysql y lenguage Java Script podríamos hacer una pagina con chats juntos.

Dame tu opionión.

Atte: Luk