elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programación sockets en C en Unix
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programación sockets en C en Unix  (Leído 2,623 veces)
marccamacho

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Programación sockets en C en Unix
« en: 17 Octubre 2012, 23:12 pm »

Buenas noches a todos,

Este es mi primer post. Por lo tanto, mucho gusto de poder participar!

La cuestión es la siguiente. En clase me han pedido implementar una aplicación de mensajeria instantánia con Sockets y en lenguaje C. Todo va bien hasta que me piden que, sin interfaz gráfica, pula los mensajes que me salen en la terminal.

Que quiero decir con pulir? Por ejemplo:

El usuario local está escriviendo una línea de texto, y justo en medio de la línea, recibe una del usuario remoto. Entonces, el texto queda mezclado de la siguiente manera:
HOLA SOY EL Mensaje del usuario remoto: BIENVENIDO YANTASH REMOTO, BUENAS NOCHES.
Dónde el color azul representa la línea que estaba escribiendo el usuario local, y el rojo el usuario remoto.

Tendría que intentar evitar esto.

Ideas? Dividir terminal (no encuentro como hacerlo sin usar SCREEN), mover el cursor (luego, cuando llega al fin de la ventana se vuelve loco)... No encuentro como hacerlo!

Si alguien me pudiera ayudar se lo agradecería mucho!

Muchas gracias de antemano!!!

PD. pido perdón de antemano por si no he situado bien el post... Soy un noob!


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Programación sockets en C en Unix
« Respuesta #1 en: 18 Octubre 2012, 12:21 pm »

Pon algo de codigo, por que no se como estas haciendo la entrada de datos a la vez que lees del socket.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
marccamacho

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Programación sockets en C en Unix
« Respuesta #2 en: 18 Octubre 2012, 14:39 pm »

Perdón, tienes razón!

Te adjunto el código, tenemos implementado dos métodos, uno que envia la información y otro que la recibe.

Código:
int MI_ProcessaLiniaLocal(int idSocketConversa){
//PRE:
//POST:

//Declaracio variables
char buffer[300],bufferEnviat[301];
int numBytes;

if((numBytes = read(STDIN,buffer,300))== -1) {
printf("Error en read()\n");
return (-1);
}
if (numBytes == 4 && buffer[0] == '/' && buffer[1] == 'f' && buffer[2] == 'i') {
printf("Has tancat la conversa.\n");
return 0;
}
else {
//FENT SERVIR EL PROTOCOL ESTABLERT, ENVIEM LA INFORMACIÓ REBUDA PER TECLAT.
bufferEnviat[0] = 'L';
int i = 0;

while (buffer[i]!='\n'){
bufferEnviat[i+1] = buffer[i];
i++;
}
if (send(idSocketConversa,bufferEnviat,numBytes,0)==-1){
printf("Error en el send()\n");
return (-1);
}
}
return 1;
}
int MI_ProcessaLiniaRemota (int idSocketConversa){
//PRE:
//POST:

//Declaracio variables
char buffer[301], bufferImprimir[300];
int numBytes;

if((numBytes = read(idSocketConversa,buffer,300)) == -1) {
printf("Error en read()\n");
return (-1);
}
else if (numBytes == 0) {
printf("L'usuari remot ha finalitzat la connexió. Fi de la conversa.\n");
return 0;
}
else {
if (buffer[0] == 'L'){
int i = 0;
while(i<numBytes-1){
bufferImprimir[i] = buffer[i+1];
i++;
}
bufferImprimir[numBytes-1] = '\0';
printf("Missatge de l'usuari remot: %s\n", bufferImprimir);
}
else {
printf("Error al rebre missatge de l'usuari remot (no segueix el protocol?)\n");
}
}
return 1;
}

Aquí adjunto mi código del main!

Citar
         switch (haArribat){
            case -1:
               exit (-1);
               break;
            case -2:
               printf("Ha passat el temps màxim d'espera introduït\n");
               exit (-1);
               break;
            case STDIN:
               estat = MI_ProcessaLiniaLocal(sConnecta);
               if (estat == -1) exit (-1);
               else if (estat == 0) {
                  acabaConversa = close(sConnecta);
               }
               break;
            default:
               estat = MI_ProcessaLiniaRemota(sConnecta);
               if (estat == -1) exit (-1);
               else if (estat == 0) {
                  acabaConversa = close(sConnecta);
               }
               break;
         }

Muchas gracias por todo!!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programacion en UNIX
Ejercicios
VERJU 0 3,161 Último mensaje 26 Mayo 2009, 11:00 am
por VERJU
Programacion de sockets...
Programación C/C++
kotora 3 2,775 Último mensaje 30 Octubre 2013, 07:00 am
por eferion
[AYUDA] Programacion de Sockets en C
Programación C/C++
sebaok 3 2,478 Último mensaje 22 Febrero 2016, 07:54 am
por Eternal Idol
ayuda libro de programacion unix
Dudas Generales
7emiliosk8 0 2,091 Último mensaje 26 Marzo 2017, 23:14 pm
por 7emiliosk8
Programacion de sockets en C++
Programación C/C++
TheLonelyPain 2 6,878 Último mensaje 23 Noviembre 2022, 23:05 pm
por TheLonelyPain
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines