Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] error al compilar sockets en c

Estas en el tema de error al compilar sockets en c en el foro de C/C++ en Foros del Web. hola a todo. buen espeor que me puedan ayudar bueno es que anterior mente ya habia compilado sockets en c en codeblock y en devc++ ...
  #1 (permalink)  
Antiguo 26/04/2014, 23:31
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 9 meses
Puntos: 5
error al compilar sockets en c

hola a todo.
buen espeor que me puedan ayudar bueno es que anterior mente ya habia compilado sockets en c en codeblock y en devc++ pero ahora ya no me quiere compilar en codeblocks me sale esto:


Código C:
Ver original
  1. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\basetsd.h||In function 'Ptr32ToPtr':|
  2. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\basetsd.h|299|warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]|
  3. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\basetsd.h||In function 'Handle32ToHandle':|
  4. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\basetsd.h|308|warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]|
  5. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\basetsd.h||In function 'PtrToPtr32':|
  6. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\basetsd.h|317|warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]|
  7. C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h|307|warning: "_cdecl" redefined [enabled by default]|
  8. C:\progc\pruebas\sock.c|1|note: this is the location of the previous definition|
  9. C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h|308|warning: "__cdecl" redefined [enabled by default]|
  10. C:\progc\pruebas\sock.c|1|note: this is the location of the previous definition|
  11. C:\Program Files (x86)\Windows Kits\8.0\Include\um\winuser.h|1086|warning: declaration does not declare anything [enabled by default]|
  12. C:\Program Files (x86)\Windows Kits\8.0\Include\um\winuser.h|12838|warning: declaration does not declare anything [enabled by default]|
  13. C:\Program Files (x86)\Windows Kits\8.0\Include\um\winuser.h|12843|warning: declaration does not declare anything [enabled by default]|
  14. C:\Program Files (x86)\Windows Kits\8.0\Include\um\objidl.h|11066|warning: declaration does not declare anything [enabled by default]|
  15. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\wtypes.h|752|error: pasting "/" and "/" does not give a valid preprocessing token|
  16. C:\Program Files (x86)\Windows Kits\8.0\Include\um\oaidl.h|473|note: in expansion of macro '_VARIANT_BOOL'|
  17. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\wtypes.h|752|error: expected specifier-qualifier-list before '/' token|
  18. C:\Program Files (x86)\Windows Kits\8.0\Include\um\oaidl.h|473|note: in expansion of macro '_VARIANT_BOOL'|
  19. C:\Program Files (x86)\Windows Kits\8.0\Include\shared\wtypes.h|752|error: pasting "/" and "/" does not give a valid preprocessing token|
  20. C:\Program Files (x86)\Windows Kits\8.0\Include\um\oaidl.h|488|note: in expansion of macro '_VARIANT_BOOL'|
  21. C:\Program Files (x86)\Windows Kits\8.0\Include\um\propidl.h|647|error: array type has incomplete element type|
  22. C:\Program Files (x86)\Windows Kits\8.0\Include\um\propidl.h|653|error: array type has incomplete element type|
  23. ||=== Build failed: 5 error(s), 9 warning(s) (0 minute(s), 1 second(s)) ===|

en dev c++ me sale lo siguiente:

Código C:
Ver original
  1. 239 0   C:\mingw completo\mingw\include\windef.h    In file included from C:\mingw completo\mingw\include/windef.h
  2. 60      C:\mingw completo\mingw\include\windows.h                    from C:\mingw completo\mingw\include/windows.h
  3. 22      C:\mingw completo\mingw-mingw-w32api\include\winsock2.h                  from C:\mingw completo\mingw-mingw-w32api\include\winsock2.h
  4. 83      C:\progc\ifdef.c                     from C:\progc\ifdef.c
  5. 2398    2   C:\mingw completo\mingw\include\winnt.h [Error] #error "undefined processor type"
  6. 2401    1   C:\mingw completo\mingw\include\winnt.h [Error] unknown type name 'CONTEXT'
  7. 62  0   C:\mingw completo\mingw\include\windows.h   In file included from C:\mingw completo\mingw\include/windows.h
  8. 22      C:\mingw completo\mingw-mingw-w32api\include\winsock2.h                  from C:\mingw completo\mingw-mingw-w32api\include\winsock2.h
  9. 83      C:\progc\ifdef.c                     from C:\progc\ifdef.c
  10. 1733    1   C:\mingw completo\mingw\include\winbase.h   [Error] unknown type name 'CONTEXT'

mi codigo es este:
Código C:
Ver original
  1. #include <stdio.h>
  2.     #include <stdlib.h>
  3.     #include <winsock2.h>
  4.     #include <windows.h>
  5.  
  6.     #define PORT 3550
  7.     #define BACKLOG 2
  8.  
  9.     main()
  10.     {
  11.     WSADATA wsaData;
  12.       if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0 )
  13.       {
  14.           printf("No se pudo inicar la libreria de sockets");
  15.           return 0;
  16.       }
  17.  
  18.        int fd, fd2;
  19.  
  20.        struct sockaddr_in server;
  21.        struct sockaddr_in client;
  22.        int sin_size;
  23.  
  24.        if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
  25.           printf("error en socket()\n");
  26.           exit(1);
  27.        }
  28.  
  29.        server.sin_family = AF_INET;
  30.  
  31.        server.sin_port = htons(PORT);
  32.        server.sin_addr.s_addr = INADDR_ANY;
  33.        if(bind(fd,(struct sockaddr*)&server,
  34.                sizeof(struct sockaddr))==-1) {
  35.           printf("error en bind() \n");
  36.           exit(-1);
  37.        }
  38.  
  39.        if(listen(fd,BACKLOG) == -1) {
  40.           printf("error en listen()\n");
  41.           exit(-1);
  42.        }
  43.  
  44.        while(1) {
  45.           sin_size=sizeof(struct sockaddr_in);
  46.  
  47.           if ((fd2 = accept(fd,(struct sockaddr *)&client,
  48.                             &sin_size))==-1) {
  49.              printf("error en accept()\n");
  50.              exit(-1);
  51.           }
  52.  
  53.           printf("Se obtuvo una conexión desde %s\n",
  54.                  inet_ntoa(client.sin_addr) );
  55.  
  56.  
  57.           send(fd2,"Bienvenido a mi servidor.\n",22,0);
  58.  
  59.  
  60.           close(fd2);
  61.        }
  62.     WSACleanup();
  63.     }
  #2 (permalink)  
Antiguo 27/04/2014, 02:24
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: error al compilar sockets en c

Hola amigo, yo sigo siendo un fiambre en esto (un queso), pero Code::Blocks te marca el número de línea en donde está el error, tratá de fijarte, ahí debería marcarte el número de línea.

De todas maneras te dejaré una gran ayuda, yo hace unos días andaba buscando algo sobre Sockets en C++ y encontré algo muy bueno, son 2 programas, un Servidor y un Cliente, pero lo bueno de estos programas, por lo menos el del Servidor, es que utiliza Threads, por lo tanto puedes aceptar un montón de conexiónes, yo lo probé abriendo varios clientes (programas .exe) y envié datos al servidor y llegaban perfectamente, espero que te pueda ayudar amigo.

A los programas ponele los nombres que yo te especificaré para que funcionen perfectamente (ejemplo.cpp):

Este es el Cliente, se llama: WinClient.cpp

Código C++:
Ver original
  1. #include <winsock2.h>
  2. #include <windows.h>
  3. #include <fcntl.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <errno.h>
  7. #include <stdio.h>
  8. #include <conio.h>
  9.  
  10. int main(int argv, char** argc){
  11.  
  12.     //The port and address you want to connect to
  13.     int host_port= 1101;
  14.     const char *host_name="127.0.0.1";
  15.  
  16.     //Initialize socket support WINDOWS ONLY!
  17.     unsigned short wVersionRequested;
  18.     WSADATA wsaData;
  19.     int err;
  20.     wVersionRequested = MAKEWORD( 2, 2 );
  21.     err = WSAStartup( wVersionRequested, &wsaData );
  22.     if ( err != 0 || ( LOBYTE( wsaData.wVersion ) != 2 ||
  23.             HIBYTE( wsaData.wVersion ) != 2 )) {
  24.         fprintf(stderr, "Could not find useable sock dll %d\n",WSAGetLastError());
  25.         exit(0);
  26.     }
  27.  
  28.     //Initialize sockets and set any options
  29.     int hsock;
  30.     int * p_int ;
  31.     hsock = socket(AF_INET, SOCK_STREAM, 0);
  32.     if(hsock == -1){
  33.         printf("Error initializing socket %d\n",WSAGetLastError());
  34.         exit(0);
  35.     }
  36.  
  37.     p_int = (int*)malloc(sizeof(int));
  38.     *p_int = 1;
  39.     if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||
  40.         (setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){
  41.         printf("Error setting options %d\n", WSAGetLastError());
  42.         free(p_int);
  43.         exit(0);
  44.     }
  45.     free(p_int);
  46.  
  47.     //Connect to the server
  48.     struct sockaddr_in my_addr;
  49.  
  50.     my_addr.sin_family = AF_INET ;
  51.     my_addr.sin_port = htons(host_port);
  52.  
  53.     memset(&(my_addr.sin_zero), 0, 8);
  54.     my_addr.sin_addr.s_addr = inet_addr(host_name);
  55.  
  56.  
  57.     if( connect( hsock, (struct sockaddr*)&my_addr, sizeof(my_addr)) == SOCKET_ERROR ){
  58.         fprintf(stderr, "Error connecting socket %d\n", WSAGetLastError());
  59.         exit(0);
  60.     }
  61.  
  62.     //Now lets do the client related stuff
  63.  
  64.     char buffer[1024];
  65.     int buffer_len = 1024;
  66.     int bytecount;
  67.  
  68.     int c;
  69.     memset(buffer, '\0', buffer_len);
  70.  
  71.     for(char* p=buffer ; (c=getch())!=13 ; p++){
  72.         printf("%c", c);
  73.         *p = c;
  74.     }
  75.  
  76.     if( (bytecount=send(hsock, buffer, strlen(buffer),0))==SOCKET_ERROR){
  77.         fprintf(stderr, "Error sending data %d\n", WSAGetLastError());
  78.         exit(0);
  79.     }
  80.     printf("Sent bytes %d\n", bytecount);
  81.  
  82.     if((bytecount = recv(hsock, buffer, buffer_len, 0))==SOCKET_ERROR){
  83.         fprintf(stderr, "Error receiving data %d\n", WSAGetLastError());
  84.         exit(0);
  85.     }
  86.     printf("Recieved bytes %d\nReceived string \"%s\"\n", bytecount, buffer);
  87.  
  88.     closesocket(hsock);
  89.  
  90.  
  91. ;
  92. }

Este otro es el Servidor, se llama: WinServer.cpp

Código C++:
Ver original
  1. #include <winsock2.h>
  2. #include <windows.h>
  3. #include <fcntl.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <errno.h>
  7. #include <stdio.h>
  8.  
  9. DWORD WINAPI SocketHandler(void*);
  10.  
  11. int main(int argv, char** argc){
  12.  
  13.     //The port you want the server to listen on
  14.     int host_port= 1101;
  15.  
  16.     //Initialize socket support WINDOWS ONLY!
  17.     unsigned short wVersionRequested;
  18.     WSADATA wsaData;
  19.     int err;
  20.     wVersionRequested = MAKEWORD( 2, 2 );
  21.     err = WSAStartup( wVersionRequested, &wsaData );
  22.     if ( err != 0 || ( LOBYTE( wsaData.wVersion ) != 2 ||
  23.             HIBYTE( wsaData.wVersion ) != 2 )) {
  24.         fprintf(stderr, "Could not find useable sock dll %d\n",WSAGetLastError());
  25.         exit(0);
  26.     }
  27.  
  28.     //Initialize sockets and set any options
  29.     int hsock;
  30.     int * p_int ;
  31.     hsock = socket(AF_INET, SOCK_STREAM, 0);
  32.     if(hsock == -1){
  33.         printf("Error initializing socket %d\n",WSAGetLastError());
  34.         exit(0);
  35.     }
  36.  
  37.     p_int = (int*)malloc(sizeof(int));
  38.     *p_int = 1;
  39.     if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||
  40.         (setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){
  41.         printf("Error setting options %d\n", WSAGetLastError());
  42.         free(p_int);
  43.         exit(0);
  44.     }
  45.     free(p_int);
  46.  
  47.     //Bind and listen
  48.     struct sockaddr_in my_addr;
  49.  
  50.     my_addr.sin_family = AF_INET ;
  51.     my_addr.sin_port = htons(host_port);
  52.  
  53.     memset(&(my_addr.sin_zero), 0, 8);
  54.     my_addr.sin_addr.s_addr = INADDR_ANY ;
  55.  
  56.     if( bind( hsock, (struct sockaddr*)&my_addr, sizeof(my_addr)) == -1 ){
  57.         fprintf(stderr,"Error binding to socket, make sure nothing else is listening on this port %d\n",WSAGetLastError());
  58.         exit(0);
  59.     }
  60.     if(listen( hsock, 10) == -1 ){
  61.         fprintf(stderr, "Error listening %d\n",WSAGetLastError());
  62.         exit(0);
  63.     }
  64.  
  65.     //Now lets to the server stuff
  66.  
  67.     int* csock;
  68.     sockaddr_in sadr;
  69.     int addr_size = sizeof(SOCKADDR);
  70.  
  71.     while(true){
  72.         printf("waiting for a connection\n");
  73.         csock = (int*)malloc(sizeof(int));
  74.  
  75.         if((*csock = accept( hsock, (SOCKADDR*)&sadr, &addr_size))!= INVALID_SOCKET ){
  76.             printf("Received connection from %s",inet_ntoa(sadr.sin_addr));
  77.             CreateThread(0,0,&SocketHandler, (void*)csock , 0,0);
  78.         }
  79.         else{
  80.             fprintf(stderr, "Error accepting %d\n",WSAGetLastError());
  81.         }
  82.     }
  83.  
  84.  
  85. }
  86.  
  87. DWORD WINAPI SocketHandler(void* lp){
  88.     int *csock = (int*)lp;
  89.  
  90.     char buffer[1024];
  91.     int buffer_len = 1024;
  92.     int bytecount;
  93.  
  94.     memset(buffer, 0, buffer_len);
  95.     if((bytecount = recv(*csock, buffer, buffer_len, 0))==SOCKET_ERROR){
  96.         fprintf(stderr, "Error receiving data %d\n", WSAGetLastError());
  97.         goto FINISH;
  98.     }
  99.     printf("Received bytes %d\nReceived string \"%s\"\n", bytecount, buffer);
  100.     strcat(buffer, " SERVER ECHO");
  101.  
  102.     if((bytecount = send(*csock, buffer, strlen(buffer), 0))==SOCKET_ERROR){
  103.         fprintf(stderr, "Error sending data %d\n", WSAGetLastError());
  104.         goto FINISH;
  105.     }
  106.  
  107.     printf("Sent bytes %d\n", bytecount);
  108.  
  109.  
  110. FINISH:
  111.     free(csock);
  112.     return 0;
  113. }

NOTA: A uno de estos programas lo modifiqué, no lo dejé de la manera adecuada porque lo quería probar a ver si compilaba y funcionaba, seguro es WinClient.cpp
Lo modifiqué porque me daba error al compilarlo. Solamente le cambié algunas líneas, por ejemplo cuando abrás el programa .exe que sería el Servidor, osea WinServer.exe, y luego abrás el WinClient.exe, la conexión se establecerá con éxito, pero cuando envías un mensaje al Servidor, el Servidor lo recibe, pero el cliente finaliza el programa, que no debería hacer eso, por eso están esos exit(0), pero es lo de menos, solo cambiás el exit(0) por lo que quieras que el programa cliente haga luego de enviar un mensaje al Servidor y listo eso es todo!!!!


¡¡Buena suerte!!
  #3 (permalink)  
Antiguo 27/04/2014, 14:44
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 9 meses
Puntos: 5
Respuesta: error al compilar sockets en c

hola principe_azul.
gracias por responder y por los codigos los revisare y bueno el problema no era el codigo. e sque anterior mente habia agrgado una header al compilador y nose por que razon pero solo las quite y todo funciono bien por lo menos en dev c++ por que en codeblocks aun no logro sabercuales el problema. y bueno gracias de nuevo.
  #4 (permalink)  
Antiguo 27/04/2014, 23:21
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: error al compilar sockets en c

De nada, espero que solucionés el problema con Code::Blocks.

Buena suerte!!

Etiquetas: compilar, int, sockets
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:18.