1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[C] Erro Sockets

Discussão em 'Programação' iniciada por Aparicio, 12 de Março de 2008. (Respostas: 10; Visualizações: 892)

  1. Aparicio

    Aparicio /dev/mod
    Staff Member

    Boas

    Estou aqui a fazer um programa que utiliza sockets (windows) que compila e corre sem problemas no dev-cpp em C++, extensão .cpp portanto, mas quando tento compilar em C ou seja com a extensão .c dá erros como:
    No projecto do dev-cpp tenho a lib libws2_32.a e também já experimentei a libwsock32.a, mas continua a dar erro ao compilar em C.

    Não é suposto funcionar tanto em C como C++???

    Cumps
     
  2. Zaonpt

    Zaonpt Power Member

    C está contido em C++, ou por outras palavras, é um subconjunto.

    estranho seria fazeres um programa em c que corre com compilador e C mas não de C++

    mostra o código que os erros mencionam sff.
     
  3. Aparicio

    Aparicio /dev/mod
    Staff Member

    Os erros são todos nesta parte de configuração e ligação do socket que não fui eu que escrevi, apenas adaptei.

    Código:
       
        struct sockaddr_in addr;
        SOCKET s;
        int r;
        [B]hostent* h;[/B]
        
        memset((void*)&addr, 0, sizeof(addr));
        addr.sin_addr.s_addr = inet_addr(SERVIDOR);
        if(INADDR_NONE == addr.sin_addr.s_addr) h = gethostbyname(SERVIDOR);
        else h = gethostbyaddr((const char*)&addr.sin_addr, sizeof(struct sockaddr_in), AF_INET);
        
        addr.sin_family = AF_INET;
        [B]addr.sin_addr   = *((in_addr*)*h->h_addr_list);[/B]
        addr.sin_port   = htons(PORTA);
         
        s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      [B]  r = connect(s, (sockaddr*)&addr, sizeof(struct sockaddr));[/B]
    
     
  4. reise

    reise Power Member

    Para mim falta aí uns includes.
     
  5. mrjm

    mrjm Power Member

    Bem antes de mais axo que te falta ai uns {} no struct nao???
     
  6. Aparicio

    Aparicio /dev/mod
    Staff Member

    Não pus o código todo apenas a parte que têm erros, tenho estes includes:
    #include <stdio.h>
    #include <winsock.h>
    #include <string.h>
    #include <time.h>
    #include <conio.h>

    Nesta parte do socket baseei-me neste tutorial, onde está praticamente como no meu código.
    Se o problema fosse esses {}, compilando em C++ também daria erro ou não?


    É que pelos erros parece que é falta de libs mas tenho as mesmas que ao compilar em c++...
     
  7. mrjm

    mrjm Power Member

    Pelo tipo de erros que dá eu acho que as variaveis nao foram é inicializadas, ve se o nome com que inicializavas é igual ao que usas no resto do codigo =)
     
  8. Aparicio

    Aparicio /dev/mod
    Staff Member

    Pois, não foram inicializadas porque a lib necessária não foi "linkada".

    E excepto o s, mais nenhuma daquelas variáveis é utilizada fora do código que pus acima.
     
  9. mrjm

    mrjm Power Member

    e enato k tal declarares as variaveis?
     
  10. Aparicio

    Aparicio /dev/mod
    Staff Member

    Depois de muito procurar lá encontrei código do Socket que compila em C.

    Código:
        struct hostent *remoteHost = gethostbyname( SERVIDOR );
        struct sockaddr_in addr;    
        addr.sin_addr.s_addr = *(u_long *) remoteHost -> h_addr_list[0];
        addr.sin_family = AF_INET;
        addr.sin_port = htons( PORTA );
    Obrigado
     
  11. duartenogueira

    duartenogueira Power Member

    Eu no Visual Studio, tenho de linkar o "wsock32.lib", e dizer "Compile as C". Tudo isto nas preferências do projecto
     

Partilhar esta Página