Aparicio
12-03-2008, 15:43
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:
`hostent' undeclared (first use in this function)
`h' undeclared (first use in this function)
`in_addr' undeclared (first use in this function)
`sockaddr' undeclared (first use in this function)
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
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.
Aparicio
12-03-2008, 18:25
Os erros são todos nesta parte de configuração e ligação do socket que não fui eu que escrevi, apenas adaptei.
struct sockaddr_in addr;
SOCKET s;
int r;
hostent* h;
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;
addr.sin_addr = *((in_addr*)*h->h_addr_list);
addr.sin_port = htons(PORTA);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
r = connect(s, (sockaddr*)&addr, sizeof(struct sockaddr));
Para mim falta aí uns includes.
Bem antes de mais axo que te falta ai uns {} no struct nao???
Aparicio
12-03-2008, 19:14
Para mim falta aí uns includes.
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>
Bem antes de mais axo que te falta ai uns {} no struct nao???
Nesta parte do socket baseei-me neste (http://energon.home.mindspring.com/tutorials/socket/socket_tutorial.html) 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++...
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 =)
Aparicio
12-03-2008, 19:31
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.
e enato k tal declarares as variaveis?
Aparicio
13-03-2008, 13:52
Depois de muito procurar lá encontrei código do Socket que compila em C.
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