Servidor TCP/IP em C
Publicado por Samuel Leonardo 27/07/2009
[ Hits: 15.070 ]
Homepage: https://tutorpro-sam.blogspot.com/
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;
}
Robo HTTP usando socket e código multiplataforma
Portscan Simples Usando Sockets em C
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









