Cliente TCP/IP em C
Publicado por Samuel Leonardo 27/07/2009
[ Hits: 15.010 ]
Homepage: https://nerdki.blogspot.com.br/
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;
}
Alucard - scan de redes defensivo
Exemplo Básico de Sockets em C
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Consertando o áudio com estalos e interrupções no Pipewire
Como implementar Raid (0, 1, 5, 6, 10 e 50)
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Como programar um sistema de controle para distribuições linux em c? (5)
Servidor Ubuntu 24.04 HD 500 não tenho espaço na \home\adminis... (2)









