SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Tootsie en Lunes 6 de Noviembre de 2006, 02:22

Título: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: Tootsie en Lunes 6 de Noviembre de 2006, 02:22
Hola,

He hecho un programa que recibe un mensaje de una máquina cliente a la máquina servidora. El mensaje se recibe ok por la pantalla, pero siempre en minúsuclas. Lo que me gustaría hacer es:

1. Escribir un mensaje por pantalla del cliente
2. Cuando aparezca en la pantalla del servidor, me devuelva el mensaje en MAYUSCULAS

Todo lo que he probado hasta el momento no funciona. Creo que tengo que usar el toupp(), pero me da un error de casting, pues paso un carácter y me pide un entero  

CODIGO DEL SERVIDOR
Código: Text
  1.  
  2.  
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include <netdb.h>
  8. #include <stdio.h>
  9. #include <unistd.h>
  10.  
  11. #define TAMBUFFER 256
  12.  
  13. int main()
  14. {
  15.    int ID_socket_ser, ID_socket_ser2, result, long_cli;
  16.    struct sockaddr_in address_ser, address_cli;
  17.    char mensaje[TAMBUFFER];
  18.  
  19.  
  20.    ID_socket_ser=socket(AF_INET, SOCK_STREAM,0);
  21.    if (ID_socket_ser==-1)
  22.    {
  23.       printf("error creacion socket\n");
  24.       exit(-1);
  25.    }
  26.    
  27.  
  28.    address_ser.sin_family = AF_INET;
  29.    address_ser.sin_addr.s_addr = htonl(INADDR_ANY);
  30.    address_ser.sin_port = htons(6001);
  31.  
  32.    result = bind(ID_socket_ser, (struct sockaddr *) &address_ser, sizeof(address_ser));
  33.    if (result<0) {
  34.       printf("error\n");
  35.       exit(-1);
  36.    }
  37.    
  38.  
  39.    listen(ID_socket_ser,2);
  40.  
  41.  
  42.    long_cli = sizeof(address_cli);
  43.  
  44.    ID_socket_ser2 = accept(ID_socket_ser, (struct sockaddr *) &address_cli, &long_cli);
  45.    if (ID_socket_ser2<0) {
  46.       printf("Error\n");
  47.       exit(-1);
  48.    }
  49.    
  50.  
  51.  
  52.    do {
  53.       memset(mensaje,0x0,TAMBUFFER);
  54.       result = recv(ID_socket_ser2, mensaje, TAMBUFFER, 0);
  55.       if (result<0) {
  56.          printf("error\n");
  57.          exit(-1);
  58.       }
  59.       else
  60.       {
  61.          printf("%s\n",mensaje);
  62.       }
  63.    } while(strncmp(mensaje,"fin",3));
  64.  
  65.  
  66.    return 0;
  67.  
  68. }
  69.  
  70.  
  71.  
  72.  


CÓDIGO DEL CLIENTE
Código: Text
  1.  
  2.  
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include <netdb.h>
  8. #include <stdio.h>
  9. #include <unistd.h>
  10.  
  11. int main(int argc, char *argv[])
  12. {
  13.    int ID_socket_cli, result;
  14.    struct sockaddr_in address_ser, address_cli;
  15.    struct hostent *h;
  16.    char mensaje[] = "Esto es un mensaje al mundo.";
  17.  
  18.  
  19.    if(argc<2) {
  20.     printf("uso : %s servidor \n", argv[0]);
  21.     exit(1);
  22.   }
  23.  
  24.  
  25.    ID_socket_cli=socket(AF_INET, SOCK_STREAM,0);
  26.    if (ID_socket_cli==-1)
  27.    {
  28.       printf("error\n");
  29.       exit(-1);
  30.    }
  31.    
  32.  
  33.    address_cli.sin_family = AF_INET;
  34.    address_cli.sin_addr.s_addr = htonl(INADDR_ANY);
  35.    address_cli.sin_port = htons(0);
  36.  
  37.    result = bind(ID_socket_cli, (struct sockaddr *) &address_cli, sizeof(address_cli)); if (result<0) {
  38.       printf("error\n");
  39.       exit(-1);
  40.    }
  41.    
  42.  
  43.  
  44.    h = gethostbyname(argv[1]);
  45.    printf("Escribe mensaje para %s\n",inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));
  46.    address_ser.sin_family = h->h_addrtype;
  47.    memcpy((char *) &address_ser.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
  48.    address_ser.sin_port = htons(6001);
  49.  
  50.  
  51.    result = connect(ID_socket_cli, (struct sockaddr *) &address_ser, sizeof(address_ser));
  52.    if (result<0) {
  53.       printf("error\n");
  54.       exit(-1);
  55.    }
  56.    
  57.  
  58.    do {
  59.       strcpy(mensaje,"");
  60.       gets(mensaje);
  61.       result = send(ID_socket_cli, mensaje, strlen(mensaje)+1, 0);
  62.       if (result<0) {
  63.          printf("error\n");
  64.          exit(-1);
  65.       }
  66.    } while(strncmp(mensaje,"fin",3));
  67.  
  68.  
  69.  
  70.  
  71.  
  72.    return 0;
  73.  
  74. }
  75.  
  76.  
  77.  
  78.  
Título: Re: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: ArKaNtOs en Lunes 6 de Noviembre de 2006, 02:30
la funcion es toupper() y esta en la libreria ctype, si quieres pasar a minusculas es tolower() ;)
Título: Re: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: Tootsie en Lunes 6 de Noviembre de 2006, 02:41
He modificado lo siguiente en mi código, pero me sigue saliendo en minúsclas:

Código: Text
  1.  
  2. #include <ctype.h>
  3.  
  4. ...
  5. int i;
  6. ...
  7.  
  8.  
  9.  
  10.    do {
  11.  
  12.                memset(mensaje,0x0,TAMBUFFER);
  13.  
  14.                for(i=0; i<strlen(mensaje); i++) mensaje[i]=toupper(mensaje[i]);
  15.  
  16.                         result = recv(ID_socket_ser2, mensaje, TAMBUFFER, 0);
  17.  
  18.                
  19.  
  20.                if (result<0) {
  21.  
  22.                            printf("error\n");
  23.  
  24.                            exit(-1);
  25.  
  26.                }
  27.  
  28.                else
  29.  
  30.                {
  31.  
  32.                            printf("%s\n",mensaje);
  33.  
  34.                }
  35.  
  36.    } while(strncmp(mensaje,"fin",3));
  37.  
  38.  
  39.  
  40.  
  41.  
  42.    return 0;
  43.  
  44.  
  45.  

¿qué hago mal?
Título: Re: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: pabloreda en Lunes 6 de Noviembre de 2006, 12:35
estas pasando a mayuscula y despues recibiendo el buffer..
Título: Re: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: Mollense en Lunes 6 de Noviembre de 2006, 15:32
Deberías hacer esto:
Código: Text
  1. result = recv(ID_socket_ser2, toupper(mensaje), TAMBUFFER, 0);
  2.  
Título: Re: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: Eternal Idol en Lunes 6 de Noviembre de 2006, 15:42
Cita de: "Angel_K_ido"
Deberías hacer esto:
Código: Text
  1. result = recv(ID_socket_ser2, toupper(mensaje), TAMBUFFER, 0);
  2.  
¿Probaste a compilar eso? La respuesta anterior, de pabloreda, da en el clavo.
Título: Re: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: Mollense en Lunes 6 de Noviembre de 2006, 15:52
Es verdad.....

Pido PERDÓN  :unsure:.
Título: Re: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: Eternal Idol en Lunes 6 de Noviembre de 2006, 15:56
Cita de: "Angel_K_ido"
Es verdad.....

Pido PERDÓN  :unsure:.
Tampoco es para pedir perdon che  ;)
Título: Re: Pasar Mensaje De Minúsclas A Mayúsculas
Publicado por: Mollense en Lunes 6 de Noviembre de 2006, 16:06
Digo la verdad.

Tantos lenguajes me están mareando, existe otra sentencia que pasa a mayuscula una frase y lo primero que ví es que lo estaban haciendo caracter a caracter, ahora estuve viendo y resulta que toupper y tolower trabajan con caracteres.

Ahora me pregunto ¿En que lenguaje, con que sentencia y en que programa lo hice con una cadena?, no lo recuerdo.

Necesito un poco de aire.

 :hola: