Client TCP
Connettersi e inviare dati
Client TCP è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.
Creare un client TCP
Un client TCP si connette a un server, quindi invia e riceve dati. Il suo ciclo di vita è più breve di quello del server: creare un socket, connettersi, comunicare e chiudere.
Passaggio 1: creare il socket
Come per il server, crei un socket di tipo stream per TCP su IPv4.
#include <sys/socket.h>
#include <stdio.h>
int make_client_socket(void) {
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) perror("socket");
return fd;
}Passaggio 2: descrivere il server
Compili un sockaddr_in con la porta e l'IP del server. Usi inet_pton per convertire la stringa IP con notazione puntata nella forma binaria.
#include <arpa/inet.h>
#include <netinet/in.h>
int set_server(struct sockaddr_in *addr, const char *ip, unsigned short port) {
addr->sin_family = AF_INET;
addr->sin_port = htons(port);
return inet_pton(AF_INET, ip, &addr->sin_addr); /* 1 on success */
}Passaggio 3: connettersi
connect() esegue l'handshake TCP con il server. In caso di successo, il socket è pronto per lo scambio di dati; in caso di errore, imposta errno, ad esempio per una connessione rifiutata.
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
int do_connect(int fd, struct sockaddr_in *addr) {
if (connect(fd, (struct sockaddr *)addr, sizeof *addr) < 0) {
perror("connect"); return -1;
}
return 0;
}Non è necessario usare bind
Di solito i client non usano bind: durante connect il kernel assegna automaticamente una porta sorgente effimera. Usi bind per un client solo quando è necessaria una porta sorgente specifica.
Passaggio 4: inviare dati
Dopo la connessione, scriva una richiesta con send. Ripeta l'operazione per assicurarsi che l'intero buffer venga inviato.
#include <sys/socket.h>
#include <string.h>
int send_all(int fd, const char *data) {
size_t left = strlen(data);
const char *p = data;
while (left > 0) {
ssize_t n = send(fd, p, left, 0);
if (n <= 0) return -1;
p += n; left -= (size_t)n;
}
return 0;
}Passaggio 5: ricevere la risposta
Legga la risposta del server con recv. Aggiunga il terminatore nullo prima di trattare il buffer come una stringa.
#include <sys/socket.h>
#include <stdio.h>
void read_reply(int fd) {
char buf[512];
ssize_t n = recv(fd, buf, sizeof buf - 1, 0);
if (n > 0) { buf[n] = 0; printf("server said: %s\n", buf); }
else if (n == 0) printf("server closed connection\n");
}Leggere fino alla chiusura
Una chiamata a recv potrebbe non restituire l'intera risposta. Ripeta l'operazione finché recv non restituisce 0, cioè finché l'interlocutore non chiude la connessione, per leggere una risposta completa arrivata in più parti.
#include <sys/socket.h>
#include <stdio.h>
void drain(int fd) {
char buf[256]; ssize_t n;
while ((n = recv(fd, buf, sizeof buf, 0)) > 0)
fwrite(buf, 1, (size_t)n, stdout);
}Passaggio 6: chiudere
Chiami close(fd) per terminare la connessione e liberare il descrittore. In questo modo invia un FIN TCP, informando il server che il client ha terminato.
#include <unistd.h>
void finish(int fd) {
close(fd);
}Chiusura parziale con shutdown
shutdown(fd, SHUT_WR) chiude solo la direzione di scrittura, segnalando la fine della richiesta e consentendo al client di continuare a leggere la risposta. È utile per i protocolli richiesta-risposta.
Gestire i problemi di connessione
Errori comuni del client: ECONNREFUSED (nessun server in ascolto), ETIMEDOUT (host irraggiungibile) ed EHOSTUNREACH. Verifichi sempre connect e segnali chiaramente gli errori all'utente.
Verifica rapida
Verifichi la Sua comprensione dei client TCP.
Riepilogo
Ha creato un client TCP.
- socket, quindi connect all'indirizzo
sockaddr_indel server - Non è necessario bind; il kernel sceglie una porta di origine
- invii la richiesta, riceva la risposta (ripeta l'operazione per ottenere tutti i dati)
- esegua close o shutdown al termine; gestisca gli errori di connect
Domande Frequenti
La lezione «Client TCP» è gratuita?
Sì — il testo completo di «Client TCP» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.
Cosa imparerò in «Client TCP»?
Connettersi e inviare dati Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C Academy?
Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Client TCP»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C Academy?
Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.