| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 30/03/2007 11:39 am | | | Título: |
| Hola:
Gracias quique por tu contestacion, ya pude pasar la variable !!! xD !!...
Pero mi problema aun continua , aun no logro hacer algo mas fluido y evitar el bloque usando los hilos, creo que lo estoy haciendo mal al llamar a la funcion pthread_join() a muy temprano momento ...
Lo que quiero hacer de forma rapida para un mejor entendimiento es que ambos (cliente y servidor) puedan estarse enviando mensajes de forma plana (sin encriptacion de datos).... Quiero lanzar 2 hilos, 1 hilo para la funcion RECV() y al recivir pues imprmir el contenido !!, y un segundo hilo que tenga lo que es la funcion fgets() y send() para que puedan escribir y se envie de inmediato.
Aqui un codigo simple y rapido.. el problema en el sig. codigo, es ke a fuerzas uno de los dos se queda parado a esperar un dato en recv() ... y quiero que ambos PUEDAN escribir cuando gusten !!!...
| Código: | void *enviar_datos( void *sock ) { char buf[N]; int clientds;
clientds= (int)sock;
memset( &buf, '\0', N );
printf( "\nDato a Enviar: " ); fgets( buf, N, stdin ); buf[strlen(buf)-1]='\0';
if( send( clientds, buf, strlen(buf), 0 )==-1 ) fprintf( stderr, "\nProblema al Enviar Datos :: %s", strerror(errno) ); else { printf( "\n---> Mensaje Enviado con exito...\n" ); memset( &buf, '\0', N ); } } |
| Código: | void *recivir_datos( void *sock ) { char buf[N]; int clientds, bytes_r=0;
clientds= (int)sock; memset( &buf, '\0', N );
if( (bytes_r=recv( clientds, buf, N, 0 ))==-1 ) fprintf( stderr, "\nProblemas para Recivir Datos :: %s", strerror(errno) ); else { printf( "------------------------------\n" ); printf( "\nMensaje Recivido: %s", buf ); printf( "\nDimension: %i", strlen(buf) ); printf( "\nBytes: %i", bytes_r ); printf( "\n----------------------------\n" ); } } |
| Código: | void inicia_cliente( char *ip ) { //creo el socket y todo lo demas....
//inicia chateo for( i=0; i<5; i++ ) { if( pthread_create( &hilo_r, NULL, recivir_datos, (void *)clientds )!=0 ) fprintf( stderr, "\nProblemas para crear Hilo de Recepcion :: %s", strerror(errno) ); if( pthread_create( &hilo_s, NULL, enviar_datos, (void *)clientds )!=0 ) fprintf( stderr, "\nProblemas para crear Hilo de Teclado :: %s", strerror(errno) ); pthread_join( hilo_r, NULL ); pthread_join( hilo_s, NULL ); } } |
| Código: | void inicia_servidor() { //creo el socket y todo lo demas...
//inicia chateo for( i=0; i<5; i++ ) { if( pthread_create( &hilo_r, NULL, recivir_datos, (void *)clientds )!=0 ) fprintf( stderr, "\nProblemas para crear Hilo de Recepcion :: %s", strerror(errno) ); if( pthread_create( &hilo_s, NULL, enviar_datos, (void *)clientds )!=0 ) fprintf( stderr, "\nProblemas para crear Hilo de Teclado :: %s", strerror(errno) ); pthread_join( hilo_r, NULL ); pthread_join( hilo_s, NULL ); } } |
| Código: | int main( int argc, char *argv[] ) { //tomo argumentos y desido si quiere iniciar como SERVIDOR o como CLIENTE:
//si es como cliente: inicia_cliente( argv[2] );
//si es como servidor inicia_servidor(); } |
_________________
|
| | Volver arriba | |  | tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 30/03/2007 12:25 pm | | | Título: |
| A ver. Te pongo las posibles causas de finalización de cada hilo:
[Recibidor]
a) En caso de que recv() devuelva un valor menor o igual que cero. (FINALIZACiÓN NORMAL) Flag: -1
b) En caso de que el usuario decida salir del programa. En ese caso, el hilo principal (o el que se encarga de enviar) mata al hilo [Recibidor] desde fuera. (FINALIZACIÓN FORZADA) Flag: 0
[Enviador]
a) El usuario remoto desconecta por lo que recv() recibe 0 ó -1 (eso depende del tipo de cierre), terminando el hilo [Recibidor] y poniendo un flag común a -1 para que el hilo [Enviador] se salga del bucle que recoge lo que teclea el usuario. (FINALIZACIÓN FORZADA).
b) El usuario decide desconectar tecleando el comando adecuado para ellos. Entonces pone un flag común a 0 y se sale del bucle que recoge los datos para enviarlos con send(). Después, antes de salir del programa mata al hilo [Recibidor]. (FINALIZACIÓN NORMAL).
Según eso, si creas 2 hilos a parte del hilo principal, sólo tiene sentido esperar con pthread_join() al hilo que envía y colocar después un if() que compruebe con el flag común si el hilo [Enviador] finalizó de forma normal o forzada y en función de eso matar o no el hilo [Recibidor] (Si el flag está a 0 se mata).
Espero que se entienda. Si no te queda claro puedes fijarte en el código del Chateitor.
Salu2  _________________ Be (void *) my friend |
| | Volver arriba | |  | Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 30/03/2007 2:31 pm | | | Título: |
| | tonilope escribió: | A ver. Te pongo las posibles causas de finalización de cada hilo:
[Recibidor]
a) En caso de que recv() devuelva un valor menor o igual que cero. (FINALIZACiÓN NORMAL) Flag: -1
b) En caso de que el usuario decida salir del programa. En ese caso, el hilo principal (o el que se encarga de enviar) mata al hilo [Recibidor] desde fuera. (FINALIZACIÓN FORZADA) Flag: 0
[Enviador]
a) El usuario remoto desconecta por lo que recv() recibe 0 ó -1 (eso depende del tipo de cierre), terminando el hilo [Recibidor] y poniendo un flag común a -1 para que el hilo [Enviador] se salga del bucle que recoge lo que teclea el usuario. (FINALIZACIÓN FORZADA).
b) El usuario decide desconectar tecleando el comando adecuado para ellos. Entonces pone un flag común a 0 y se sale del bucle que recoge los datos para enviarlos con send(). Después, antes de salir del programa mata al hilo [Recibidor]. (FINALIZACIÓN NORMAL).
Según eso, si creas 2 hilos a parte del hilo principal, sólo tiene sentido esperar con pthread_join() al hilo que envía y colocar después un if() que compruebe con el flag común si el hilo [Enviador] finalizó de forma normal o forzada y en función de eso matar o no el hilo [Recibidor] (Si el flag está a 0 se mata).
Espero que se entienda. Si no te queda claro puedes fijarte en el código del Chateitor.
Salu2  |
Hola:
Esto entiendi:
[RECIVIDOR] Recivimos 0 cuando el cliente forzo cerrar la conexion, por ejemplo: CTRL+C.
Recivimos -1, cuando cerro la conexion normalmente (close(socket)).
[ENVIADOR] a) El usuario remoto desconecta por lo que recv() recibe 0 ó -1 (eso depende del tipo de cierre), terminando el hilo [Recibidor] y poniendo un flag común a -1 para que el hilo [Enviador] se salga del bucle que recoge lo que teclea el usuario. (FINALIZACIÓN FORZADA).
Osease te refieres a poner:
| Código: | int *valor;
pthread_create( &hilo, NULL, recive, (void *)client ); pthread_create( &hilo2, NULL, envia, (void *)client );
if( pthread_join( hilo, (void *)&valor ) !=0 ) printf( "no se pudo esperar hilo recividor." ); else { if( valor==0 ) { printf( "-- Cliente Forzo el Cierre --" ); pthread_exit(hilo2); //hilo enviador } else { printf( "-- Cliente Cerro la Sesion --" ); pthread_exit(hilo2); //hilo enviador } } |
Nadamas queda una bronca ... el chat se brinca la palabra principal... ... osease:
| Código: | printf( "Dato a Enviar: " ); fgets( buf, N, stdin ); |
!!!! _________________
|
| | Volver arriba | |  | | tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 30/03/2007 3:31 pm | | | Título: |
| NO, me refiero a esto:
| Código: | int *valor;
pthread_create( &hilo, NULL, recive, (void *)client ); pthread_create( &hilo2, NULL, envia, (void *)client );
//Esperamos al hilo [Enviador] pthread_join( hilo2, (void *)&valor ); //Una vez que termina el hilo [Enviador] analizamos qué provocó su finalización
if( valor==0 ) { //El hilo [Enviador] terminó porque el usuario local decidió salir del programa pthread_exit(hilo);//Nos cargamos el hilo [Recibidor] que estará bloqueado con recv() ya que no lo vamos a necesitar más.
}
//Ahora que han terminado los dos hilos ya podemos cerrar el socket, etc... }
|
Salu2 
EN cuanto a lo otro imagino que te refieres a que te imprime un salto de línea. Eso es porque fgets te lee el '\n'. Para solucionarlo, después de leer haz un: cadena[strlen(cadena)-1]=0;
Salu2  _________________ Be (void *) my friend |
| | Volver arriba | |  | Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 30/03/2007 7:11 pm | | | Título: |
| Hola:
Entendido lo de enviar, recivir y tambien despues de esperar por un hilo xD !!!...
Ahora, hacerca de:
| tonilope escribió: | EN cuanto a lo otro imagino que te refieres a que te imprime un salto de línea. Eso es porque fgets te lee el '\n'. Para solucionarlo, después de leer haz un: cadena[strlen(cadena)-1]=0;
Salu2  |
Me refiero por ejemplo:
1- Inicio Servidor en un Terminal y Cliente en Otra Terminal 2- Despues de que se conectan, en la temrinal del Servidor dice: "Escribir: " (y esta el fgets()). 3- En la terminal del Cliente se queda la palabra: "Conectando al Servidor.."
Hasta que el SERVIDOR envia un HOLA o cualquier cosa, ahora si en la ventana del Cliente aparece: "Escribir: " (fgets()).
Digamos que en el servidor escribo HOLA, despues me hagarro a escribir en el CLIENTE.... Haz de cuenta que cuando en el servidor decia: "Escribi: ", despues de los ":", se queda el prompt, apatir de ahi siguen apareciendo los mensajes !!!, y osea... no aparecen conforme deben, en la parte de arriba ... Es ovio que si el promp esta ahi, pues apartir de ahi aparecen los caracteres, pero como puedo hacer que se escriban las cosas en la parte de arriba !!! ???....
Para que se presenve y NO se cruzen metan las letras despues del: "Escribe: ".
????
Aqui te dejo un ejemplo en IMAGEN !!...
IMAGEN 1 -- Aqui inicia Servidor y Cliente, pero en Cliente NO aparece la palabra "Escribe: "
IMAGEN 2 -- Se visualiza como despues de enviar una palabra con el SERVIDOR, ya aparece en el cliente: "Escribe: "
IMAGEN 3 -- Se visualiza el Problema principal de empalme de palabras !!!
byee _________________
|
| | Volver arriba | |  | ciomar
Registrado: 01 Abr 2007 Mensajes: 5
| Publicado: 01/04/2007 6:55 pm | | | Título: Re: Chat Servidor-Cliente !! Ayuda en algunas partes del cod |
| | Diabliyo escribió: | Hola:
Estoy realizando un chat a nivel Consola, utilizo la plataforma Linux (distro Slackware) y esto haciendo un solo ejecutable para poder utilizarlo o iniciarlo ya sea como Servidor o como Cliente.
Ya tengo lista la parte logica del servidor, utilizando la funcion SELECT() chequeo si existen datos por leer en algun socket de los clientes conectados, y posteriormente envio la informacion del socket que envia, hacia los demas Sockets Clientes.
El unico problema es la logica cuando quiero inciar el programa como Cliente, estoy batallando un poco para saber como hacer que el Cliene haga 2 tareas, ejemplo:
1- Si existen datos en el socket por leer, pues que los lea y muestre en ventana (oviamente SELECT() soluciona el problema).
2- En caso que NO existan datos por leer, que monitoree o bien cheque que el usuario este escribiendo algo para ser enviado al chat (el mensaje).
He aqui mi problema....
Intente utilizar la funcion alarm(segundos), pero esta no respeta que el usuario este escribiendo algo (fgets()), simplamente al sobre pasar el tiempo en segundos, este envia una senal y finaliza la aplicacion.
La unica que se me ocurre es que fgets() NO se bloquee, osea que fgets() no se quede esperando datos del usuario, en caso que NO existan datos, que este continue con sus operaciones.
Pero mi pregunta seria: Como Hago a fgets() no bloqueante ???...
byee |
Creo que se soluciona tu problema muy facilmente si le agregas al select ademas de los sockets la stdin. Si entra algo por el stdin, el select te lo informa y lo podes procesar directamente...
Personalmente para un chat, me parece poco recomendable hacerlo en un entorno multihilo, ya que habría una mini e ínfima penalidad entre los cambios de contextos entre los hilos (thread switch). Creo que un el i/o multiplexing del select basta... jejeje hasta el servidor proxy SQUID utiliza select().
Salu2... |
| | Volver arriba | |  | | Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 01/04/2007 8:46 pm | | | Título: Re: Chat Servidor-Cliente !! Ayuda en algunas partes del cod |
| | ciomar escribió: | Creo que se soluciona tu problema muy facilmente si le agregas al select ademas de los sockets la stdin. Si entra algo por el stdin, el select te lo informa y lo podes procesar directamente...
Personalmente para un chat, me parece poco recomendable hacerlo en un entorno multihilo, ya que habría una mini e ínfima penalidad entre los cambios de contextos entre los hilos (thread switch). Creo que un el i/o multiplexing del select basta... jejeje hasta el servidor proxy SQUID utiliza select().
Salu2... |
Hola:
Entonces sino utilizas Hilos o Procesos no habria forma de realizar el chat :S, bueno... quedaria solamente un chat de uno a uno (cuando uno escribe, el otro espera)....
Por otro lado, SI se podria lograr como tu dices con SELECT(), y seria mas o menos asi:
| Código: | #define STDIN 0
select( stdin+1, sock_r, sock_w, NULL, NULL ); |
Solo existiria un problemon jejeje, cuando pulse o empiezes a teclear, la funcion SELECT saltara y dejara de estar en monitorizacion de los demas sockets, y las llamadas entrantes se perderian :S !!... forzosamente se debe usar un modo de procesamiento paralelo, que seria usando: hilos o procesos.....
Bueno, eso es lo que yo te puedo opinar respecto a mis conocimientos y porke pues es muy ovio !!!...
bye bye _________________
|
| | Volver arriba | |  | quique
Registrado: 30 Mar 2004 Mensajes: 720 Ubicación: Por ahí
| Publicado: 03/04/2007 10:35 pm | | | Título: |
| Un par de anotaciones sobre el ultimo comentario:
El valor de este "file descriptor" está definido en STDIN_FILENO, en unistd.h
Dado que el "estandard IN" puede modificarse en tiempo de ejecucion, te recomiendo el uso de STDIN_FILENO
| Cita: | | Solo existiria un problemon jejeje, cuando pulse o empiezes a teclear, la funcion SELECT saltara y dejara de estar en monitorizacion de los demas sockets, y las llamadas entrantes se perderian :S !!... forzosamente se debe usar un modo de procesamiento paralelo, que seria usando: hilos o procesos..... |
Esto no es así, sino que depende de como esté configurado el "stdin". En el caso de un terminal bash de SUSE 9 (la que uso yo), el terminal no transmite la informacion hasta que el usuario no pulsa enter. Pero esto puede modificarse y, lo dicho, depende del terminal. Si usas otros tipos de consolas, puede haber otros comportamientos.
Por ello, sí sería posible la realización del chat sin multi-thread o multi-proceso. Aunque en ningún caso sería la implementación (a mi juicio) adecuada.
Salu2 _________________ /* no comment */ |
| | Volver arriba | |  | Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 04/04/2007 12:12 pm | | | Título: |
| Hola:
Bueno gracias por las aclaraciones, pero quisiera que el tema no se despejase mucho, ya que al momento el problema principal recide en:
Ver Cita del Post:
| Diabliyo escribió: | Hola:
1- Inicio Servidor en un Terminal y Cliente en Otra Terminal 2- Despues de que se conectan, en la temrinal del Servidor dice: "Escribir: " (y esta el fgets()). 3- En la terminal del Cliente se queda la palabra: "Conectando al Servidor.."
Hasta que el SERVIDOR envia un HOLA o cualquier cosa, ahora si en la ventana del Cliente aparece: "Escribir: " (fgets()).
Digamos que en el servidor escribo HOLA, despues me hagarro a escribir en el CLIENTE.... Haz de cuenta que cuando en el servidor decia: "Escribi: ", despues de los ":", se queda el prompt, apatir de ahi siguen apareciendo los mensajes !!!, y osea... no aparecen conforme deben, en la parte de arriba ... Es ovio que si el promp esta ahi, pues apartir de ahi aparecen los caracteres, pero como puedo hacer que se escriban las cosas en la parte de arriba !!! ???....
Para que se presenve y NO se cruzen metan las letras despues del: "Escribe: ".
????
Aqui te dejo un ejemplo en IMAGEN !!...
IMAGEN 1 -- Aqui inicia Servidor y Cliente, pero en Cliente NO aparece la palabra "Escribe: "
IMAGEN 2 -- Se visualiza como despues de enviar una palabra con el SERVIDOR, ya aparece en el cliente: "Escribe: "
IMAGEN 3 -- Se visualiza el Problema principal de empalme de palabras !!!
byee |
_________________
|
| | Volver arriba | |  | | tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 04/04/2007 1:44 pm | | | Título: |
| Ese problema lo tienes resuelto en el Chateitor. Mírate el código, estúdialo y si tienes dudas concretas pregunta.
Salu2  _________________ Be (void *) my friend |
| | Volver arriba | |  | Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 11/04/2007 9:33 am | | | Título: |
| Hola:
Resolvi lo de que: Al iniciar Cliente, no mostraba el mensaje: "Escribe: ", ya que estupidamente estaba haciendo una llamada a recv() antes de iniciar los hilos del cliente, pero weno, llegue a la conclusion de ke la puse porke estaba pensando en realizar un tipo de autentificacion o comprobacion de versiones entre chats jejeje, tipo Chateitor pero solo quedo en un PENSAR, ya que aun quiero resolver la bronca viva que es:
Hacer que el Prompt siempre este delante de: "Escribe: |" y que los mensajes se vayan poniendo por Encima del mensaje: "Escribe: |"....
Una ultima pisata, ya que por mas que leo y releo el codigo de Chateitor, no veo nada que me pueda ayudar a dedusir como resolver mi problema !!...
Lo unico que veo es que utiliza tambien: Sincronizacion de Hilos para Exclusion Mutua (Mutex) (CreateMutex(), ReleaseMutex()), segun mi conocimiento los MUTEX sirven para que los hilos puedan acceder a datos como por ejemplo una estructura, modificar valores de dicha estructura y que los demas Hilos puedan ver los datos modificados al mismo tiempo. Osease, que Entre Hilos puedan acceder, modificar datos y entre Hilos puedan ver las modificaciones a su ves uno espere a ke se termine de utilizar dicha estructura.
Pero talves aqui esta mi respuesta :S, solo que NO logro entenderlo !!... Una ayuda porfavor !!
bye bye _________________
Ultima edición por Diabliyo el 11/04/2007 10:34 am; editado 1 vez |
| | Volver arriba | |  | Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 11/04/2007 10:32 am | | | Título: |
| ..... _________________
|
| | Volver arriba | |  | | tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 11/04/2007 10:42 am | | | Título: |
| El problema que tienes que superar es para mi el mayor reto de un chat de consola. La putada es que en el Chateitor yo lo solucioné para Windows así que desconozco si existirán las funciones del WinAPI en Linux.
Te hago un resumen de todas formas. El asunto es básicamente que la consola es un recurso compartido por los dos hilos y que hay que sincronizar para que:
a) Los mensajes salgan por encima de lo de Escribe:
b) No se pisen entre sí los mensajes recibidos y lo que el usuario teclea.
El caso a) se resuelve haciendo que cada vez que se recibe un mensaje, el cursor BORRE la línea actual, imprima el mensaje recibido y vuelva a escribir la línea actual. Para conseguir eso tienes que ir guardando lo que teclea el usuario, para que al recibir el mensaje puedas recuperarlo, imprimirlo y que el suaurio pueda seguir escribiendo. (Es decir, tienes que leer carácter a carácter del teclado con una función tipo getch() en vez leer toda la línea de golpe con fgets() ). Para borrar necesitas alguna función que te permita mover el cursor de la consola a las coordenadas que tú quieras y luego meter espacios.
El caso b) ya es más "sofisticado". Consiste en sincronizar los hilos con un MUTEX, de tal forma que cada hilo consulte el MUTEX ANTES DE hacer alguna tarea crítica y se quede a la espera de turno si el otro hilo está ocupando el recurso compartido (es como un semáforo simple). Esto se usa básicamente para evitar que los mensajes impresos en la consola se mezclen entre sí.
Espero que con esto puedas avanzar.
Salu2 
PD: Si no encontraras una función en Linux para mover el cursor podrías hacer el chat con dos ventanas de consola (dos procesos). Una para introducir los mensajes y la otra el registro donde se imprimen los mensajes recibidos y los enviados por ti. Para comunicar la ventana de escritura con la otra puedes usar otro socket... _________________ Be (void *) my friend |
| | Volver arriba | |  | Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 11/04/2007 12:36 pm | | | Título: |
| Hola:
Bueno, tengo conocimientos basicos en Programacion GTK+, pero nose si estas se adapten a poder mover el cursos de la Consola/Terminal jejeje...
En fiin, ya que es necesario buscar ese tipo de solucion (mover cursos de consola), quisiera formular otra pregunta, ya que el fin de hacer este CHAT, no es por querer HACERLO SIMPLEMNTE, sino porke esoty haciendo una aplicacion para Redes LAN,Wireless,Bluetooth !!... Y quiero incorporarle este tipo de opcion: CHAT !!...
El problema es ke nose si me sea mas conveninente y facil hacerlo en Ventanas que en CONSOLA !!...
Ya que segun a como me lo he planteado imaginariamente, solo seria cuestion de crear:
-1 GTKLista Box -1 GTL Text Box -1 GTK Button -1 GTK TextArea
Posteriormente madar los mensajes al TEXT AREA, cuando se active o mande senal "clicked" al BUTTON, compruebe si existen datos en el: TEXT BOX, para despues enviarlos al TEXT AREA y asu ves al SOCKET de los CLIENTES. !!!...
Seria mas conveninete asi, no????
Enfin.... seguire leyendo xD !!
Y sobre mutex me ha quedado claro que sirve para FRENAR a un HILO para que espere al HILO ACTUAL escribir en la estructura !!!.... Sera un tipo de SEMAFOROS, pero para Hilos seria MUTEX utilizando: lock y unluck !!...
bye bye _________________
|
| | Volver arriba | |  | Diabliyo
Registrado: 14 Abr 2004 Mensajes: 317 Ubicación: En la Luna
| Publicado: 18/05/2007 12:41 pm | | | Título: |
| Hola:
Bueno, al ver de nuevo este post he visto que he avanzado mucho, pero como es de saber:
'nunca terminas de aprender'....
Ya he logrado aprender mucho sobre GTK+, pero tengo dudas aun , ya que sin esto no podre dar seguimiento hacia adelante en mi proyecto de tesis sobre una aplicacion para visualizar/monitorear el trafico en una red y proporcionar informacion !!, oviamente tambien incluir un chat para los que se instalen el cLIENTE...
Quien sea tan amable de ver el post aca: http://elrincondelc.com/nuevorincon/foros/viewtopic.php?t=9779
Es sobre algunas cosillas de GTK+ para empezar a programar el ambiente visual del sistema !!
Nuevamente tonilope, gracias por la ayuda... y sobre aquel chat en modo consola bajo linux, si es y fue posible utilizando ncurses.h, brinda varias funciones interesantes jejejeje para poder realizar lo mismo que chateitor, pero bajo linux xD !!... despues pongo el code, nomas que lo implemento en mi sistema y quedara liberado para que lo usen al gusto !!!
Gracias !!
bye bye _________________
|
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |