Cliente TCP/IP em C
Publicado por Samuel Leonardo 27/07/2009
[ Hits: 14.683 ]
Homepage: localhost
Exemplo de um cliente TCP/IP usando sockets.
NOTA: Também postei um servidor para esse cliente. Verifique na lista de scripts contribuídos por mim através do meu perfil.
Para compilar:
$ gcc -o client tcp_client.c
Para executar:
$ ./client <ip_do_servidor> <num_da_porta>
Valeu!
/* Exemplo de um cliente TCP/IP usando sockets. NOTE: Eu já postei um servidor para esse cliente. para compilar: $ gcc -o client tcp_client.c para executar: $ ./client <ip_do_servidor> <num_da_porta> valeu! */ #include <stdio.h> #include <stdlib.h> #include <string.h> // #include <sys/types.h> #include <sys/socket.h> //struct sockaddr_in, htons() e outras #include <netinet/in.h> //funções inet_*() #include <arpa/inet.h> #include <errno.h> /*perror()*/ #include <unistd.h> /*close()*/ int main(int argc, char *argv[]) { int sockfd; int bytes; socklen_t length; char recv_buffer[32], send_buffer[32], quit; struct sockaddr_in server; sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0) { perror("client_sockfd:::"); exit(1); } if(argc == 3) { server.sin_family = AF_INET; //NOTE:aqui é meio sem garantia, mas espero que voce não erre ao passar o numero da porta. server.sin_port = htons(atoi(argv[2])); server.sin_addr.s_addr = inet_addr(argv[1]); memset(&(server.sin_zero), 0x00, 8); } else { printf("\n\tusage: %s <ip_do_host> <num_porta> \n\n", argv[0]); close(sockfd); exit(1); } //conectando-se ao servidor length = sizeof(struct sockaddr); if(connect(sockfd, (struct sockaddr *)&server, length) < 0) { perror("client_connect:::"); close(sockfd); exit(1); } quit = 'N'; while(quit != 'S') { bytes = recv(sockfd, recv_buffer, 32, 0); //supondo que não ocorreu um erro acima recv_buffer[bytes] = 0x00;//ponha o caractere '{FONTE}' //servidor fechou a conexão ou ocorreu um erro if(bytes <= 0)//ocorreu um erro = -1, fechou conexão = 0 { perror("client_recv:::"); close(sockfd); exit(1); } printf("\nDIGITE UMA MENSAGEM PARA ENVIAR AO SERVIDOR:\n"); //lendo da entrada padrão fgets(send_buffer, 32, stdin); //se no inicio da string estiver o 'S' então esse é o ultimo loop quit = send_buffer[0]; //enviando string ao servidor. strlen(send_buffer) pode ser menor que 32 bytes = send(sockfd, send_buffer, strlen(send_buffer), 0); if(bytes < 0) { perror("client_send:::"); close(sockfd); exit(1); } //só agora podemos ver a mensagem recebida do servidor printf("\nRECEBIDO:::%s\n\n", recv_buffer); } close(sockfd); return 0; }
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Modernização e Avanço do Linux. (23)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (1)
Mensagem quando tento fazer o apt update && apt upgrade no kal... (2)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta