CHAT en VB

Iniciado por LGAR, 4 Mayo 2006, 05:42 AM

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

LGAR

bueeno.. en primer lugar me presento  ;D soy Luis, de Guatemala... tengo 16 años y ando por aqui de autodidacta... hace rato q andaba viendo este foro y me registre y naaa q aqui toy  ::) ....

... ahora, yendo algrano.... estoy haciendo un "chat" para funcionar en una lan.... ya aprendi a usar masomenos el winsock y eso... pero ahora stoy pensando en el sistema q voy a utilizar para tener varias conversaciones y eso, y claro esta lo normal q seria crear un servidor y q todos se conecten y el servidor lo haga todo, pero no quisiera q se hiciera asi  por varias razones....... .. el punto es q se me ocurrio q talvez se podria de máquina a maquina, individualmente, y en protocolo UDP pa q no haya servidor ni cliente, sino q las maquinas esten en el mismo "nivel", pero me doy cuenta de un gran problema, como esta el localport y el remoteport, entonces x ejemplo dos maquinas q se conectan tendrian los "puertos cruzados", es decir, la entrada de una seria la salida de la otra y viceversa ¿o no?.. y por lo tanto, no se podria hacer q el programa escuche en determinado puerto y mande info a otro determinado puerto..... y ademas creo q nose puede hacer q mas de una aplicación este usando el mismo puerto o si ?
   
     ... en fin... espero ideas para poder hacer esto sin tener q crear un servidor....     


                              .,,, un saludo  ;)

Kizar

Maxo... me lo e leido 3 veces y no mee empanao de nada, explicalo mejor.
Ideas claras y concisas.
Salu2

SeroS

Mira si entiendo bien lo que queres hacer, la forma que se me ocurre es:
**El Programa van a ser clientes y servidores a la ves ya que el programa va a tener 2 winsock, uno para mensajes entrantes y uno para mensajes salientes, estos winsock van a usar distinto puerto.
**Cada usuario va a ser identificado por su ip, despues si queres hacete un sistema de nicks que no es dificil.
**El winsock para los mensajes entrantes siempre esta a en Listen.
entoces cuando vos mandas un mensaje lo que pasaria seria esto al apretar el boton de enviar...

Codigo Para enviar

Dim mensaje As String
Dim ips(20) As String ' En este vector vas a guardar las ips de las personas con las que estas hablando

Private Sub Command1_Click()
    mensaje = Trim(text1.Text)
    'Al enviar el mensaje seteas el WS_eviar para que se likee al ws_recivir de el receptor
    ws_enviar.RemoteHost = ips(0)
    ws_enviar.Connect
    ws_enviar.SendData (mesaje)
    ws_enviar.Close ' Lo vuelvo a cerrar y ya esta listo para enviar mensajes a quien vos quieras...
End Sub


Y listo solo te queda hacer que cuando te llegue el connection request , conectes recibas el paquete (mensaje), cierres el ws_recibir y lo pongas en listen de vuelta, Calculo que con eso funcionaria.

EDIT: el codigo no lo probe lo escribi asi nomas para que entiendas mi idea, solo te faltaria agregarle al paquete de mensaje un identificador para indentificar de quien es dicho mensaje y ponerlo en distintos text...

Saludos y espero que te sirva =)
Life is one long insane trip. Some people just have better directions.

Kizar

Hay surgen muchos problemas...
1. Si estas ablando con varias personas tenes k estar cerrando el winsock y abrindole y cerrandole todo el tiempo y eso te va a dar problemas.
2. Con usar un solo winsock para enviar y recibir datos te bastaria.(en todo caso pondria uno a parte pra la transferencia de archivos y que asi mientras se envia el archivo puedas seguir ablando)
3. La diferencia entre el protocolo UPD y TCP es k el TCP comprueba que los datos an llegado, por eso es mas adecuado para este tipo de progamas.
4. SI se puede conectar con varias maquinas por el mismo puerto  ;)

SI lo explicas un poco mejor te pongo code.
Salu2

SeroS

Cita de: KiZaR en  4 Mayo 2006, 19:25 PM
Hay surgen muchos problemas...
1. Si estas ablando con varias personas tenes k estar cerrando el winsock y abrindole y cerrandole todo el tiempo y eso te va a dar problemas.

No Sabia que podia llegar a traer problemas, pense que  no era una manera limpia de hacerlo pero que funcionaba, Gracias por el dato =)...

Cita de: KiZaR en  4 Mayo 2006, 19:25 PM
Hay surgen muchos problemas...
4. SI se puede conectar con varias maquinas por el mismo puerto  ;)

  Haber si entiendo, si yo tengo 3 usuarios A , B , C.
El usuario A empieza una conversacion con el usuario B (Tomando como que el winsock del usuario A es el que envia el request ), despues un usuario C puede realizar una connecion con cualquier usuario, usando 1 solo winsock por aplicacion y siempre el mismo puerto, si es asi me explicarias como.... Saludos =)
Life is one long insane trip. Some people just have better directions.

Kizar

CUando LGAR diga exactamente lo que quiere hacer me pongo a codear todo de una vez...

LGAR

hmmm veamos, ideas claras y concisas eh...... ok,
basicamente quiero crear un solo programa, para todas las  compus, q no haya tal cosa de servidor, y entonces cualquier maquina se podria conectar a cualquier máquina...... mmm ok ahora q volvi a revisar la informacion del winsock ya descarte el protocolo UDP ;D....  bueno, lo del protocolo UDP ya no :rolleyes: :-[....... pero todavia no estoy seguro de cómo hacerle para tener varias conversaciones...también tendria q ser capaz de solicitar conexiones, asi como de aceptar conexiones, todo esto se puede hacer con un puerto y un solo winsock???

LGAR

bueeno :-\... he ido avanzando por mi cuenta y me he decidido por hacerlo con servidor... habrá un solo ejecutable incluso para el servidor, si es servidor lo dira un archivo de configuracion... cada programa tiene 2 winsocks, uno q se conecta al "nodo" superior, y otro q esta a la escucha para aceptar hasta 6 conexiones...esto es para q no se sature el servidor, ya q las computadoras no son de lo mejor.... cada cliente se conecta al servidor y el servidor  lo ubica donde haya espacio...en el servidor, el winsock usado para el nodo superior, sera usado para aceptar una conexión, q otro programa que se conecte a ese winsock complete las tareas del servidor......... luego posteo el codigo q llevo  ;)....