Construir um servidor de eco TCP
Acompanhe a implementação completa de um servidor de eco TCP
Construir um servidor de eco TCP é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Objetivo
Crie um servidor TCP mínimo que aceite uma conexão, leia bytes e os escreva de volta. O "Olá, mundo" da programação de redes.
Estrutura básica do servidor
O fluxo do servidor é: criar o soquete, associá-lo, fazê-lo escutar, aceitar conexões e usar handle. Repita indefinidamente.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
while (true) {
int client = accept(srv, nullptr, nullptr);
handle(client);
close(client);
}Opção de reutilização de endereço
Defina SO_REUSEADDR para que o servidor possa ser reiniciado imediatamente, sem esperar que o OS libere a porta.
int yes = 1;
setsockopt(srv, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));O laço de eco
Leia os dados em um buffer e escreva os mesmos bytes de volta. Pare quando o cliente fechar a conexão.
void handle(int client) {
char buf[1024];
while (true) {
ssize_t n = recv(client, buf, sizeof(buf), 0);
if (n <= 0) break; // closed or error
send(client, buf, n, 0);
}
}Leituras e escritas parciais
Tanto recv quanto send podem transferir menos bytes do que o solicitado. Em um protocolo baseado em fluxo, repita até concluir.
ssize_t total = 0;
while (total < n) {
ssize_t s = send(client, buf + total, n - total, 0);
if (s <= 0) break;
total += s;
}Tratando vários clientes
A abordagem mais simples é criar uma nova linha de execução por conexão. Funciona para centenas de clientes, mas apresenta dificuldades com milhares.
while (true) {
int client = accept(srv, nullptr, nullptr);
std::thread([client]{ handle(client); close(client); }).detach();
}Melhor: conjunto de linhas de execução
Criar uma linha de execução por conexão desperdiça recursos em grande escala. Um conjunto fixo de linhas de execução com uma fila de trabalho escala melhor.
Encerramento controlado
Trate SIGTERM/SIGINT para fechar o soquete de escuta de forma limpa. RAII também ajuda a garantir que todos os soquetes dos clientes sejam fechados.
Tratamento de erros
Trate os erros como algo esperado: clientes se desconectam, as redes apresentam instabilidades e os limites do OS se esgotam. Registre o erro e continue — não encerre o programa por causa de um cliente problemático.
Registrando cada cliente
Registre o endereço remoto para permitir a observabilidade.
sockaddr_in remote{};
socklen_t len = sizeof(remote);
int client = accept(srv, (sockaddr*)&remote, &len);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &remote.sin_addr, ip, sizeof(ip));
std::cout << "client " << ip << ":" << ntohs(remote.sin_port);Testando com netcat
Teste interativamente seu servidor de eco com nc.
nc 127.0.0.1 8080
hello
hello # echoed backAlém do eco
A partir do eco, você pode evoluir para:
- Protocolos baseados em linhas (semelhantes ao HTTP)
- Protocolos binários enquadrados (prefixo de tamanho)
- Mensagens JSON ou Protobuf
Verificação rápida
Qual é a finalidade da opção de soquete SO_REUSEADDR?
Recapitulação
Um servidor de eco TCP mínimo usa: socket, setsockopt SO_REUSEADDR, bind, listen e um laço com accept. Para vários clientes, crie linhas de execução ou use um conjunto de linhas de execução. Em grande escala, mude para E/S assíncrona (na próxima lição).
Perguntas Frequentes
A aula “Construir um servidor de eco TCP” é grátis?
Sim — o texto completo de “Construir um servidor de eco TCP” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Construir um servidor de eco TCP”?
Acompanhe a implementação completa de um servidor de eco TCP Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Construir um servidor de eco TCP”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- API de sockets BSD em C++
- Construir um servidor de eco TCP
- IO assíncrono com epoll e kqueue
- Usar Boost Asio para IO assíncrono moderno