Tutorial Qt Creator – Messenger en C++

muy bien en este tutorial vamos a crear un messenger de área local es decir que se puede chatear en la red local en to end to land local área network primero hacemos la aplicación para el servidor vamos a utilizar una consola application ya que el servidor no tiene necesidad de ser una interfaz gráfica y vamos a escribir a esto tu messenger land server así le ponemos no importa el nombre no vamos a poner finish aquí le vamos a poner net work y acá email cxx flags más igual menos este de igual género más +11 ahora vamos a agregar y no va a agregar una clase se va a llamar de un messenger socket voy a poner poner el mismo nombre en mayúsculas de los archivos y vamos a agregar también la clase tu messenger server ahí está ahora vamos a entrenar socket vamos a incluir qt cp socket vamos a heredar de un tcp socket y aquí vamos a recibir una variable de tipo quint ctr vamos a poner cuando o sea el manejador y también vamos a recibir un object puntero padre igual en el éter lo vamos a poner aquí reuters ep sockets parent del padre y aquí escribe escribimos set socket descriptor cuando ahora vamos a conectar este este mismo puntero esta misma clase con su señal de messenger socket que sería ready read lo conecto a esta función anónima y aquí vamos a emitir la función de ready read dónde vamos a pasar el puntero dice esta señal la vamos a especificar por aquí le ponemos el macro q objects para poder usar señales signals void tu red y read que recibe el tu messenger socket puntero eso es destructor no lo voy a utilizar lo voy a quitar así y es todo ahora en la parte del servidor vamos a incluir qt esp server público cp server aquí se pone object puntero padre iguala el ppr y aquí se le pone q tcp server padre luego borramos el destructor porque no lo necesito vamos a poner private q list por aquí vamos a poner class the messenger socket y estaba por aquí le ponemos le ponemos m sockets luego acá incluimos q de book también incluimos tu messenger sockets

por aquí en la parte del constructor nada pero vamos a redefinir la parte protected void incoming connection winter hands agregamos la definición y aquí hacemos un puntero llamado socket igual a new tu messenger socket y allí se le pone el mando y se le pone this ahora este eso que lo vamos a agregar a los sockets así y conectó este choque con la señal que emite tu messenger socket que es tu red y read hacia esta función anónima en la que se recibe un puntero de tipo de messenger socket lo llamo s mayúscula abro las llaves y así aquí lo que vamos a hacer escribir en el socket más bien hacer la lectura del socket y redistribuirla a todos los demás sockets vamos a incluir q text stream y aquí hacemos cut text stream llamado t mayúscula s mayúscula se pone ahí se le hace un read all se lee todo y aquí se hace la variable text de variable texto y aquí cargamos todo el texto que hay adentro del socket muy bien entonces leemos el texto del socket y este texto lo vamos a distribuir a todos los demás sockets de la red para ello hacemos un recorrido con un lo hacemos auto y en los sockets y vamos a enviarlos a todos los sockets de la siguiente forma creamos aquí un texto stream llamado t no porque ya está aquí pero podría hacer acá mayúscula luego acá ponemos la y luego hacemos acá y aquí hacemos la introducción del texto se introduce el texto para cada shock de la red y al final será todo esto aquí por lo voy a partir así y entonces la parte de la lectura de los sockets ya quedó lista ahora vamos a hacer otra otra cosa aquí vamos a tener la señal de state chains the messenger socket puntero y también el estado int ahora venimos acá y aquí hacemos connect bis the messenger socket state change y lo ponemos int s mayúscula y por acá vamos a emitir the state change se le pone 10 s el estado puede ser cualquiera de estos and connected state esté desconectado este no sé que sea este es conectando estés conectado etcétera etcétera ahora vamos a conectar aquí este socket con la señal socket de state change vamos a recibir un puntero de messenger socket llamado s mayúscula y creo que ya no lo están viendo esto así sí y por acá int el estado sería st por aquí vamos a a preguntar más bien como este socket que está aquí es en sí el que tiene este estado vamos a preguntar si el estado del socket este es exactamente igual q tcp soccer and connected state eso quiere decir que se desconectó y aquí que me está mal

qué quiere punto y coma perdón aquí me faltó esto eso es si está desconectado entonces vamos a tomar confort auto y en los sockets y a todos ellos les vamos a decir con el cut text stream que se desconectó un socket y es eso que se desconectó pues es ese y de este show que te vamos a tomar su socket descriptor y les vamos a decir a todos aquí server o sea el servidor dice el socket o el cliente fulanito o sea este se ha desconectado a desconectarlo como estamos escribiendo en los sockets tenemos que hacerle una limpieza al shock con plus igual aquí me faltó ponerle y plus tenemos que tener cuidado de no repetir el socket este de aquí aquí porque este socket sigue estando incluido en los shoppings lo que hacemos es tomar los sockets y decirle remover el socket s se remueve de los sockets y luego ya se puede mandar la información ahora todo esto que está sucediendo en el servidor lo tendríamos que poder mostrar en la consola con q de mujer por ejemplo aquí podríamos mencionar con q de book que se está ejecutando el de ready read y aquí que se está ejecutando el dúo stage chains y luego bueno pero este solamente se ejecuta cuando está dentro de leaf entonces aquí es curioso que bueno aquí ejecutamos código y ponemos desconectado connected state o desconectado y ahora vamos a venir al server y aquí ponemos to start no perdón start server lo ponemos aquí un puerto y aquí ejecutamos listen se le pone cuyos padres y se le pone el puerto que de hecho es de tipo wind 16 aquí está cu cu int 16 cook y int 16 esto de nuevo va a devolver volea no y aquí vamos a retornar ese valor con punto y coma por aquí venimos a main y aquí vamos a incluir tu messenger server de una vez voy a introducir todo esto en el espacio de nombres duarte corporation esto no es esto es opcional para quién va a poner aquí su nombre si quiere o no poner nada muy bien ahora en maine vamos a hacer

aquí el zinc names space duarte corporation aquí hacemos tu messenger server y yo lo llamo server y a este le pongo start server en el puerto 3 3 3 3 y si el servidor no carga le ponemos q de book no ponemos error string ponemos acude book error y le ponemos el error este y es todo en caso de que todo esté bien bueno aquí hacemos return 1 y aquí hacemos q de book server started servidor iniciado vamos a probar el funcionamiento qué pasó por acá que te no y aquí que tu cv text stream no le gusta bien es que aquí me falta punto y coma de nuevo y aquí punto y coma bien el servidor inicio y me pide permiso el windows para acceder a la red de hoy que sí y simplemente el servidor inicio pero no tiene sentido el servidor ya que no hay clientes entonces vamos a hacer lo siguiente cuando se nos conecte un cliente vamos a avisar aquí con q de book vamos a ponerle cliente connected with cuando le ponemos el hand ahí dice cliente conectado con el código del handball del manejador esto le va a avisar cuando un cliente se conecte y aquí cuando se desconecte y aquí le vamos a poner cuál es el socket no el handball del shop socket descriptor nos va a avisar aquí with hand o sea con manejador table y aquí también muy bien ahora lo que hacemos es programar el cliente hacemos una aplicación de interfaz gráfica llamada tu messenger land cliente incluso podríamos hacerlo para android pero en este caso no por aquí hacemos network de acuerdo entonces aquí ponemos el estándar 2011 y ahora aquí vamos a poner claras qt cp sockets y acá pondremos qt socket m socket por aquí incluimos qt ese peso que y hacemos eso que es igual a ni un tcp socket ahora en la interfaz gráfica vamos a

poner un text edit vamos a poner un line edit vamos a poner un post button de hecho 2 vamos a poner otro line edit acá arriba vamos a poner un lay vol playboy aquí en la bola acá este ‘label lo que va a decir es el nickname y este es el que va a decir es el mensaje este va a decir enviar este va a decir conectar de esta forma aquí le ponemos de título nickname aquí le ponemos message aquí lo ponemos sent es lo mismo que enviar y aquí lo ponemos bint que es conectarnos o algo así le damos clic derecho go to slots y acá clic derecho go to action ahora vamos a agregar un formulario de este tipo designer forma clase de tipo diálogo y le vamos a poner tu messenger conexión y en este diálogo vamos a ponerle lo que sería el line edit de la dirección ip y el spinvox del puerto vamos a poner acá ley vol aquí se pone joyce name y aquí se pone puerto a este le ponemos de título house name y a este puerto el puerto así por aquí esto así esto acá pues botón aquí y aquí otro aquí sería aceptar y aquí cancelar aquí una horizontal speiser y todo de esta manera a este le ponemos de título ok ya este lo ponemos cáncer clic derecho go to slot y clic derecho words a ver aquí voy a cambiarle de nombre a esto ponerlo mayúscula y aquí vamos a tener que poner esto aquí así ahora cuando damos clic en el ok lo que tenemos que hacer es primero definir aquí lo que sería el house name y el q int 16 el puerto ahora por acá lo que hacemos es el house name es igual no me parece bueno juegos name texto y el puerto es port value y en cáncer simplemente es rejects y aquí es accept acepté ahora aquí cuando hacemos en bing lo que hacemos es primero incluir de messenger conexión dire

por aquí ponemos el messenger connection dialog d le ponemos exceso y si todo está en orden bueno de hecho si esto es igual a q dialog rejected nos tenemos que retirar pero si no si no fue así entonces si sacamos lo que sería el house name y el puerto pero vamos a poner aquí con string house name y con 16 puertos le damos acá outside class y aquí también definición outside class aquí retornamos el host name y aquí retornamos el puerto lo ponemos in line esta es una forma de hacerlos inline sin que estén adentro de la clase muy bien y por aquí lo que hacemos cuando le damos en vino aquí vamos a pedir el house name y aquí vamos a pedir el puerto y hacemos un socket connect to coast aquí va el hosting y aquí va el puerto y una vez que esté conectado lo que hacemos es conectar el sockets no de hecho esto se conecta antes en el constructor conectamos el socket con la señal de ese peso que ready reed esto está bien así aquí ponemos para leer la lic para leer el socket aquí vamos a incluir good texto stream y ponemos cutex stream m eso que aquí hacemos la lectura de todo el contenido aquí ponemos el texto del socket y este lo vamos a añadir al tex edit con up en los ponemos el texto ahí ahora en la parte del servidor cuando se conecta un cliente sería aquí oh perdón aquí sí perdón aquí está conectado al cliente tenemos que mandarle a todos los demás clientes que alguien se conecte entonces tendríamos que poner tendremos que hacer un recorrido así por auto y en sockets y a cada uno le vamos a poner el mensaje de texto stream y y aquí les mandamos el mensaje que dice se ha conectado y luego le ponemos aquí el mando y después limpiamos los sockets para que todo mundo sepa quién se conectó y quién y si se desconectaron también no y bueno aquí aquí dice y aquí vamos a decir que el server está diciendo esto muy bien qué más por acá cuando le damos en mandar o en enviar necesitamos un cut text stream y eso que ya el vamos a poner aquí el nickname primero nick name text dos puntos y luego lo que quieres enviarnos que sería en el mes h text está el mensaje luego limpiamos el socket con plus y le ponemos al mes h lo limpiamos también con clear esto está bien así y sería todo lo que sigue es bueno voy a hacer lo

mismo de que lo voy a introducir en el espacio de nombres que esto no es obligatorio pero es buena práctica que cada quien haga esto con su propio nombre y listo y aquí en main hacemos using names space duarte corporation y listo por acá le pongo a la aplicación el estilo fusión y bien lo primero que tenemos que hacer es correr el servidor así que ejecutamos el servidor cargando ya el servidor ya está este servidor tenemos que mantener abierto ahora vamos a abrir un cliente está compilando el cliente ahí está nuestro cliente aquí está el servidor aquí hay un cliente nickname no voy a poner cero conectar y aquí pongo house name lo pongo local host y de puerto lo pongo con el servidor está en el puerto 33 33 aquí yo le pongo 33 33 no quiere poner 3333 eso es porque me falta aplicarle aquí máximo vamos a poner el máximo posible bien corremos otra vez el cliente aquí tenemos el cliente nickname cedo conectar local host 3333 conectar y el servidor dice aquí cliente conectados con manejador 396 y aquí me pone el mensaje el servidor servidor se ha conectado el 396 y mensaje por ejemplo hola enviar y dice dice hola y aquí apareció el ready read muy bien si yo ahora abro otro cliente otro tenemos el cliente de aquí abajo y el otro dos clientes con el mismo servidor este cliente se va a conectar también al localhost y al puerto 3 333 a no perdón pero primero el nickname voy a ponerle a na y conectar localhost 33 33 aceptar y miren como aquí hace 2 le apareció se conectó a alguien el 400 y el servidor aquí lo dice y aquí a na pues le aparece no se conectó y aquí le pongo hola envió y se le envía a todos los clientes aquí me parece a nadie hola yo le pongo aquí hola ana me aparece aquí hola ana y anna le aparece hola si hubiera otro cliente vamos a ver otro cliente tres clientes ahora ya no caben o en la pantalla aquí vamos a ponerle louis y vamos a conectar localhost 33 33 y a todos los desapareció que se conectó a alguien aquí vamos a poner hola muchachos y a los a todos les llega hola muchachos ahora si se desconecta anna por ejemplo se cierran a na y que aparece servidor dice el cliente menos uno se ha desconectado sale menos uno porque realmente como se desconectó se perdió

toda la información de ese socket igual aquí a louis le parece eso y en el servidor dice se desconectó el -1 de red de hecho si se desconecta también cedo aparece lo mismo no se desconecta al menos uno y finalmente si se desconecta el último al servidor no le queda nadie pero puede seguir abriendo clientes a ver ejecutó el cliente y bueno pero los clientes van a depender siempre el servidor vamos a abrir dos clientes ahí están 2 dos clientes y el servidor aquí está vamos a poner aquí nickname cedo conectar block al host 3333 ahí está y este será ana muy bien y aquí ana se conecta no no se ha conectado conectamos 33 33 y listo ya están conectados ambos aquí le pongo hola ana y ana le pone o la cedo y se envía todo pero qué pasa si cierro el servidor lo quito el servidor entonces los clientes quedan abandonados y si yo le pongo aquí hola ana otra vez pues no pasa nada por más que yo escriba texto no sucede nada igual acá no sucede absolutamente nada y es imposible hacer conexiones porque no no hay servidor si se cae el servidor los clientes no funcionan entonces eso es todo nos vemos en el siguiente tutorial