
paulo1205
(usa Ubuntu)
Enviado em 07/02/2019 - 22:20h
Há vários erros no código. Mesmo assim, seria bom que você dissesse qual mensagem de erro está lhe incomodando, e se ela ocorre durante a compilação, na ligação do executável ou na execução.
#include <stdio.h>
#include <netdb.h>
Faltaram vários cabeçalhos, tais como <sys/socket.h>, <netinet/in.h> e <arpa/inet.h>.
O tipo de retorno de
main() tem de ser
int, não
unsigned. E os argumentos dessa função, se você estiver usando C, devem ser ou “
void” ou “
int argc, char **argv”.
int sock;
int conexao;
struct sockaddr_in alvo;
sock = socket(AF_INET, SOCK_STREAM, 0);
Teoricamente, ao invocar
socket() você deveria usar
PF_INET, em lugar de
AF_INET, porque
socket() não lida diretamente com endereços, mas sim com “domínios” ou “famílias de protocolos” (
protocol families). Quem lida com endereços são
bind(),
connect() e
accept(), e mais algumas outras.
(Mas isso é um pouco de preciosismo de quem trabalhou durante muito tempo com BSD, que foi onde surgiu a API de
sockets. Na prática, quase todos os sistemas, inclusive o BSD, fazem as constantes
PF_* com os mesmos valores das constantes
AF_* correspondentes, e alguns padrões, incluindo o POSIX, nem sequer mencionam as constantes
PF_* — erroneamente, no meu entender.)
alvo.sin_family = AF_INET;
alvo.sin_port = htons(80);
alvo.sin_addr.s_addr = inet_addr("192.168.0.1");
conexao = connect(sock, (struct sockaddr *)&alvo, sizeof alvo);
if(conexao == 0)
A variável
conexao não é estritamente necessária. Você poderia colocar a chamada a
connect() dentro da expressão usada para o
if, comparando-a diretamente com o valor de retorno desejado, como mostra o exemplo a seguir.
if(connect(sock, (struct sockaddr *)&alvo, sizeof alvo)==0) /* ... */
{
printf("Conetado...");
}
else{
printf("Erro...");
}
Faltou, acima, o fechamento do bloco de implementação de
main().
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)