Servidor TCP/IP em C
Publicado por Samuel Leonardo 27/07/2009
[ Hits: 14.665 ]
Homepage: https://nerdki.blogspot.com.br/
Exemplo de um servidor TCP/IP usando sockets. Esse é o primeiro script que faço que não é um jogo :P, mas tá valendo.
NOTA: Também postei um cliente para esse servidor, verifique na lista de scripts enviados por mim através do meu perfil.
Para compilar:
$ gcc -o server tcp_server.c
Para executar:
$ ./server <num_da_porta>
Valeu!
/* Exemplo de um servidor TCP/IP usando sockets. Esse é o primeiro scripts que faço que não é um jogo :P, mas tá valendo. NOTE: Vô postar hoje um cliente para esse server. para compilar: $ gcc -o sever tcp_server.c para executar: $ ./server <num_da_porta> valeu! NOTE: ORGANIZEI TODO O CÓDIGO, DE FORMA QUE FIQUE MAIS LEGÍVEL A LÓGICA DO MESMO. ISSO É O QUE ACONTECE QUANDO SE USA A TECLA TAB. /:^] */ #include <stdio.h> #include <stdlib.h> #include <string.h> // #include <sys/types.h> #include <sys/socket.h> //funções inet_*() #include <arpa/inet.h> //struct sockaddr_in, ntol e outras #include <netinet/in.h> #include <errno.h> #include <unistd.h> int main(int argc, char *argv[]) { int sockfd, new_sockfd; int bytes; socklen_t length;//para accept() e bind() char buffer[32], quit; struct sockaddr_in server; struct sockaddr_in client; sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0) { perror("server_sockfd:::"); exit(1); } if(argc == 2) { server.sin_family = AF_INET; //é meio arriscado usar atoi() aqui, //mas assim fica fácil escolher em que porta esperar por conexões server.sin_port = htons(atoi(argv[1])); server.sin_addr.s_addr = INADDR_ANY; memset(&(server.sin_zero), 0x00, 8); } else { printf("\n\tusage: %s <num_porta> \n\n", argv[0]); close(sockfd); exit(1); } length = sizeof(struct sockaddr); if(bind(sockfd, (struct sockaddr *)&server, length) < 0) { perror("server_bind:::"); close(sockfd); exit(1); } //o servidor aceitará no máximo apenas duas conexões if(listen(sockfd, 2) < 0) { perror("server_listen:::"); close(sockfd); exit(1); } printf("\nAguardando por conexões na porta %s...\n\n", argv[1]); //aguardando por conexões new_sockfd = accept(sockfd, (struct sockaddr *)&client, &length); if(new_sockfd < 0) { perror("server_accept:::"); close(sockfd); exit(1); } printf("\nAceitando conexão de %s\n\n", inet_ntoa(client.sin_addr)); quit = 'N'; while(quit != 'S') { bytes = send(new_sockfd, "SERVER:::ok!", 12, 0); //ocorreu um erro = -1 if(bytes < 0) { perror("server_send:::"); close(new_sockfd); close(sockfd); exit(1); } bytes = recv(new_sockfd, buffer, 32, 0); //NOTE:ocorreu um erro = -1 ou cliente fechou conexão = 0 if(bytes <= 0) { perror("server_recv:::"); close(new_sockfd); close(sockfd); exit(1); } buffer[bytes] = 0x00;//0x00 o mesmo que '{FONTE}' quit = buffer[0]; printf("\nRECEBIDO:::%s\n\n", buffer); } close(new_sockfd); close(sockfd); return 0; }
Calcular Broadcast e IPs disponíveis
Exemplo Básico de Sockets em C
Simples servidor http com concorrência feito em C
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
firefox nao guarda meus logins nos sites (1)
Instalar debian testing (13) "por cima" do debian 12 (2)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (1)