Ir al contenido


Foto

Necesito probar programa de Chat


  • Por favor identifícate para responder
48 respuestas en este tema

#1 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 20 julio 2012 - 05:36

Le he estado dado un par de vueltas al código del TCP Broker del que hablamos el otro día, y lo he cambiado un poquito para darle un protocolo que regule el trafico de mensajes. Ahora los mensajes que se envían y se reciben tienen que tener una estructura definida, lo que permite manejarlos mejor, y sobre todo encaminarlos hacia el destino correcto.

En el zip adjunto, dentro de la carpeta bin, se pueden encontrar dos ejecutable "TCPBroker.exe" y "Cliente.exe". El TCPBroker es el servidor, y ya explique aquí ( http://delphi.jmrds.com/?q=node/82 ) como instalarlo. El otro es un pequeño programa de chat, que cree a modo de demostración del funcionamiento del servidor, y entre otras cosas permite conversaciones privadas o entre varios usuarios, usando un cifrado AES256 para cifrar todos los mensajes.

Para probarlo podéis usar  algo como esto (cambia TUNOMBRE por el tuyo sin espacios):


delphi
  1. Cliente 83.165.42.235 55555 TUNOMBRE PRUEBA "Clave Secreta"



La ip es la mía en este momento, dejare el servidor a la escucha en esa ip durante al menos un día por si alguien quiere probarlo sin tener que instalar el servidor en su equipo. La IP es dinámica así que puede dejar de funcionar en cualquier momento  :(

Al ejecutarlo se mostrara algo como esto:


delphi
  1. USER TUNOMBRE OK
  2. TAG PRUEBA OK



Para mandar un mensaje solo tienes que teclearlo y pulsar Enter, entonces todos los demás usuarios conectados en ese momento al chat "PRUEBA" recibirán el mensaje que has enviado, pero solo los que estén usando la misma "Clave secreta" que tu podrán descifrarlo, nadie mas, ni siquiera el servidor pueden ver el contenido del mensaje  :)

Algo así es lo que se ve en pantalla:


delphi
  1. USER TUNOMBRE OK
  2. TAG PRUEBA OK
  3.  
  4. TUNOMBRE@PRUEBA: hola
  5. OTRO@PRUEBA: hola



Cualquiera puede crear su propia conversación, solo hay que cambiar "PRUEBA" por cualquier otro identificador (sin espacios). Como veis para mantener una conversación lo único que hace falta es ponerse de acuerdo previamente que identificador y que clave van a usar todos los participantes.

Todavía hay bastante que pulir, pero me va gustando como queda y  quería vuestra opinión.

PD: Para probarlo, no hace falta que esperéis hasta encontrar a alguien mas conectado. Abrid dos veces el programa y listo  :D
PD2: La conexiones tienen un "timeout" de 5 minutos. Si no se envía ningún mensaje (aunque sea en blanco) en ese tiempo la conexión se cierra.

Saludos

ACTUALIZACIÓN: ES MEJOR DESCARGAR EL CÓDIGO DE LOS ÚLTIMOS MENSAJES, ES MAS ACTUAL


  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 20 julio 2012 - 07:26

Esta bueno, funcionó tal cual, ¿los mensajes se guardan en el servidor?
  • 0

#3 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 21 julio 2012 - 01:32

Esta bueno, funcionó tal cual, ¿los mensajes se guardan en el servidor?

No, el servidor solo actúa como un "repartidor", cuando recibe un mensaje inmediatamente lo reenvía a los demás usuarios implicados en la "conversación". No sería difícil modificar el servidor para que guardara una copia de los mensajes, pero precisamente la potencia de este "broker" es que solo regula el trafico, sin analizar el contenido de los mensajes, por lo que ahora lo usamos para hacer un chat, pero mañana lo podemos usar para enviar cualquier otro tipo de datos binario y no tendríamos que modificar nada. Por otro lado, los mensajes en este ejemplo van cifrados, así que si el servidor no conoce la contraseña de poco le puede servir guardar los mensajes.
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 21 julio 2012 - 02:59

Siento no poder ayudarte por el momento. :(


Saludos.
  • 0

#5 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 21 julio 2012 - 03:59

Siento no poder ayudarte por el momento. :(


Estaré esperando :)
  • 0

#6 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 21 julio 2012 - 10:46

Bien, solo que cuando envias el mensaje podria aparecer de nuevo el nombre a la espera del siguiente??

  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 21 julio 2012 - 11:32

Permite conexiones a través de proxy? :p de ser así me uno al testeo
  • 0

#8 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 21 julio 2012 - 12:12

Permite conexiones a través de proxy? :p de ser así me uno al testeo


No he bajado el cóodigo pero si no lo hace, esta puede ser la solución:

www.delphiaccess.com/forum/trucos-y-consejos-16/pedir-autentificacion-en-un-proxy/

www.delphiaccess.com/forum/trucos-y-consejos-16/autentificarnos-en-un-proxy/


Saludos.
  • 0

#9 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 21 julio 2012 - 03:22

Bien, solo que cuando envias el mensaje podria aparecer de nuevo el nombre a la espera del siguiente??

Me lo apunto, aunque no es tan sencillo. La función "System.Readln" bloquea el programa impidiendo que reciba mas mensajes hasta que se introduce el texto, por eso utilizo la función "Keypress" para saber cuando el usuario quiere escribir un nuevo mensaje y entonces utilizar "Readln". El que aparezca nuestro nombre al principio de la linea sirve para indicarnos que el programa esta detenido esperando que introduzcamos el nuevo mensaje.

Permite conexiones a través de proxy? :p de ser así me uno al testeo

Me temo que no :( ... si se trata de un proxy http lo veo complicado, ya que que el protocolo de comunicación ni siquiera se parece al http. Aunque si tu proxy tiene habilitado el método "CONNECT" puedes utilizar un programa con desproxy http://desproxy.sour...t/index-es.html para establecer un túnel TCP hacia mi servidor. Si mas adelante continuo con esto (ya sabeis que me aburro pronto de mis proyectos *-) ) podemos intentar meterle lo de los proxys.
  • 0

#10 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 21 julio 2012 - 05:54

A petición del amigo poliburro he añadido la opción de usar un proxy, solo hay que cambiar el archivo "Cliente.dpr" por este otro:

En el siguiente mensaje hay un código mejor ...


El proxy tiene que soportar el método CONNECT, el mismo que se utiliza para hacer conexiones https.

Ahora más te vale probarlo poli  :p  :)

Saludos
  • 0

#11 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 22 julio 2012 - 10:02

Una vez que me metí con lo de los Proxy decidí darle un lavado de cara y organizar un poco el código.

También aproveche para incluir la autentificación en el proxy (ahora si que no hay excusas  :p )

Ejemplo con un proxy anónimo:


delphi
  1. C:\TCPBroker\bin>Cliente 83.165.42.235 55555 TUNOMBRE PRUEBA "Clave Secreta" 190.225.190.4:3128
  2. CONNECT 83.165.42.235:55555 HTTP/1.0
  3. HTTP/1.0 200 OK
  4.  
  5. Conectado ...
  6. Iniciando sesion ...
  7. USER TUNOMBRE OK
  8. TAG PRUEBA OK
  9. Ya puedes escribir!
  10.  
  11. TUNOMBRE@PRUEBA: HOLA



Ejemplo con un proxy que necesita autentificación:


delphi
  1. C:\TCPBroker\bin>cliente 83.165.42.235 55555 TUNOMBRE PRUEBA "Clave Secreta" 127.0.0.1:8080 usuario:123
  2. CONNECT 83.165.42.235:55555 HTTP/1.0
  3. Proxy-Authorization: Basic dXN1YXJpbzoxMjM=
  4. HTTP/1.0 200 OK
  5. Server: FreeProxy/4.50
  6. Date: Sun, 22 Jul 2012 16:18:22 GMT
  7. Content-Type: application/octet-stream
  8.  
  9. Conectado ...
  10. Iniciando sesion ...
  11. USER TUNOMBRE OK
  12. TAG PRUEBA OK
  13. Ya puedes escribir!
  14.  
  15. TUNOMBRE@PRUEBA: HOLA



Dejo adjunto el código completo. Actualización: El código mas abajo
  • 0

#12 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 julio 2012 - 08:24

Otra pequeña actualización. Ahora el servidor puede mandar mensajes con información al cliente, sin que esta la solicite primero (mensajes de bienvenida, de advertencia, etc ...). El cliente antiguo ya no es compatible con el nuevo servidor (se asustaba al recibir el mensaje de bienvenida  :D  ) así que hay que usar el cliente nuevo.

Ajunto cliente y servidores nuevos.

PD: Poliburro, no me digas que después de añadirle la opción del proxy lo vas a dejar sin probar  :@

Actualización: Archivos mas abajo
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 23 julio 2012 - 08:54

Caramba!!!

Vas a un ritmo tremendo amigo Domingo, y yo sufriendo con un puto programa para uso interno, ya no hay respeto para los héroes  :D :D :D

Saludos
  • 0

#14 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 23 julio 2012 - 10:11

Si quieres una prueba en real, me lo descargo y chateamos un rato ;) jejejejeje
  • 0

#15 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 23 julio 2012 - 10:43


PD: Poliburro, no me digas que después de añadirle la opción del proxy lo vas a dejar sin probar  :@



Jajajajaja sorry amigo es que me habia desconectado el fin de semana.... Pero ahora si lo probaré.

saludos
  • 0

#16 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 julio 2012 - 10:46

Si quieres una prueba en real, me lo descargo y chateamos un rato ;) jejejejeje

No estaría mal, lo malo es que ahora estoy en el trabajo  :s asi que no te puedo asegurar que este muy atento. Aunque un "hola y adios" si se puede hacer  ;)

Podemos usar esta cadena de conexión:


delphi
  1. Cliente 83.165.42.235 55555 TUNOMBRE DELPHIACCESS "DELPHIACCESS"



Lo tendré encendido durante media horita ahora (hasta que salga), y luego lo volvere abrir por la noche

Se puede unir el que quiera  :D

  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 23 julio 2012 - 10:48

Lo tendré encendido durante media horita ahora (hasta que salga), y luego lo volvere abrir por la noche

Se puede unir el que quiera  :D


Si lo dejas abierto a las 9:00PM (GMT-6) yo hago la prueba :D :D :D

Saludos
  • 0

#18 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 23 julio 2012 - 10:51

Pues lo he ejecutado pero me ha marcado error en la primera línea...
mando imagen..

para mencionar que lo probé con delphi7 en windows 2000 que es la configuración que tengo en la oficina...



saludox¡¡¡¡¡¡¡¡¡¡¡

Archivos adjuntos


  • 0

#19 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 23 julio 2012 - 11:05

Pues lo he ejecutado pero me ha marcado error en la primera línea...
mando imagen..

para mencionar que lo probé con delphi7 en windows 2000 que es la configuración que tengo en la oficina...


Pues es por culpa de la la librería de windows crypt32.dll que en windows 2000 le faltan alguna funciones. Pon la dll que te adjunto en el mismo directorio de la aplicación y listo.
  • 0

#20 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 23 julio 2012 - 11:41

caray... esto de usar windows 2000

ahora me dice:

The Procedure entry point CryptStringToBinaryA could not be located in the dinamic link library cript32.dll
  • 0




IP.Board spam blocked by CleanTalk.