Template repository per l'assegnazione della prima prova di esonero: client-server TCP.
Questo repository contiene la struttura base per lo sviluppo di un'applicazione client-server TCP in linguaggio C, utilizzando la libreria standard delle socket. Il codice è progettato per essere portabile su sistemi operativi Windows, Linux e macOS.
Il repository è organizzato in due progetti Eclipse CDT separati:
.
├── client-project/ # Progetto Eclipse per il client
│ ├── .project # Configurazione progetto Eclipse
│ ├── .cproject # Configurazione Eclipse CDT
│ └── src/
│ ├── main.c # File principale del client
│ └── protocol.h # Header con definizioni e prototipi
│
└── server-project/ # Progetto Eclipse per il server
├── .project # Configurazione progetto Eclipse
├── .cproject # Configurazione Eclipse CDT
└── src/
├── main.c # File principale del server
└── protocol.h # Header con definizioni e prototipi
- Cliccare su "Use this template" in alto a destra su GitHub
- Creare un nuovo repository personale
- Rinominate il repository sostituendo la parola template con il vostro cognome seguito dalla matricola (
template_esonero_tcp->cognome_12345_esonero_tcp) - Se l'esonero è svolto in coppia, il nome del repository sarà
cognome1_12345_cognome2_6789_esonero_tcp
- Rinominate il repository sostituendo la parola template con il vostro cognome seguito dalla matricola (
- Clonare il repository sul proprio computer:
git clone <url-del-tuo-repository>
- Aprire Eclipse CDT
- Selezionare
File → Import → General → Existing Projects into Workspace - Selezionare la directory
client-project - Ripetere i passi 2-3 per
server-project
Dopo aver importato i progetti, è necessario verificare e configurare le impostazioni del compilatore:
Per ciascun progetto (client e server):
- Click destro sul progetto →
Properties - Andare in
C/C++ Build → Tool Chain Editor - Verificare che il Current toolchain sia corretto per il proprio sistema operativo:
- Linux: GCC
- macOS: GCC
- Windows: MinGW GCC (Assicurarsi di avere già installato MinGW o MinGW-w64)
Per compilare su Windows, è necessario linkare la libreria Winsock:
- Click destro sul progetto →
Properties - Andare in
C/C++ Build → Settings - Selezionare
MinGW C Linker → Libraries - In Libraries (-l), cliccare su
Adde inserire:wsock32 - Applicare le modifiche e cliccare
OK
Contiene:
- Costanti condivise: numero di porta del server, dimensione buffer, ecc.
- Prototipi delle funzioni: inserire qui le firme di tutte le funzioni implementate
Esempio:
#define SERVER_PORT 27015
#define BUFFER_SIZE 512
// Prototipo funzione esempio
int connect_to_server(const char* server_address);Contiene:
- Codice boilerplate per la portabilità cross-platform
- Inizializzazione Winsock su Windows
- Sezioni TODO dove implementare la logica dell'applicazione
Gli studenti devono:
-
Definire i parametri nel file
protocol.h:- Numero di porta dell'applicazione
- Dimensione dei buffer
- Altre costanti necessarie
-
Implementare le funzioni necessarie:
- Aggiungere i prototipi nel file
protocol.h - Implementare le funzioni nel file
main.c
- Aggiungere i prototipi nel file
-
Completare il codice seguendo le sezioni TODO:
- Client: creazione socket, connessione al server, invio/ricezione dati
- Server: creazione socket, bind, listen, accept, gestione client
- Utilizzare le costanti definite in
protocol.hinvece di valori hardcoded
Dopo aver completato lo sviluppo in Eclipse, è necessario salvare le modifiche sul repository GitHub utilizzando Git da riga di comando.
-
Sincronizzare con il repository remoto
Prima di iniziare a lavorare, scaricare eventuali modifiche fatte da altri collaboratori sul repository condiviso:
git pull
Questo comando scarica e integra le modifiche dal repository remoto. È particolarmente importante quando si lavora in coppia o si lavora da computer diversi.
-
Verificare lo stato del repository
Aprire un terminale nella directory del progetto e controllare quali file sono stati modificati o creati:
git status
Questo comando mostra:
- File modificati (in rosso se non ancora aggiunti)
- Nuovi file non tracciati
- File pronti per il commit (in verde)
-
Aggiungere file allo staging area
La staging area (area di preparazione) è uno spazio intermedio dove si selezionano le modifiche da includere nel prossimo commit.
Per aggiungere tutti i file modificati e i nuovi file:
git add .Oppure, per aggiungere file specifici:
git add client-project/src/main.c git add server-project/src/main.c git add client-project/src/protocol.h
-
Committare le modifiche
Dopo aver aggiunto i file allo staging area, creare un commit con un messaggio descrittivo:
git commit -m "Implementazione logica client-server TCP"Il messaggio del commit dovrebbe descrivere brevemente le modifiche apportate. Altri esempi:
git commit -m "Aggiunta funzione di gestione connessioni" git commit -m "Implementazione protocollo comunicazione" git commit -m "Fix gestione errori socket"
-
Pushare le modifiche su GitHub
Infine, caricare i commit sul repository remoto:
git push
Oppure, se è il primo push sul branch corrente:
git push -u origin main
Ecco un esempio del flusso completo dopo aver modificato i file in Eclipse:
# 1. Sincronizzare con il repository remoto
git pull
# 2. Controllare lo stato
git status
# 3. Aggiungere tutti i file modificati
git add .
# 4. Verificare che i file siano nello staging area
git status
# 5. Creare il commit
git commit -m "Completamento implementazione client e server"
# 6. Caricare su GitHub
git push- Sincronizzare prima di lavorare: Fate sempre
git pullprima di iniziare a modificare i file, specialmente se lavorate in coppia o da computer diversi. Questo evita conflitti. - Committare frequentemente: Non aspettare di completare tutto il progetto. Fate commit incrementali ogni volta che completate una funzionalità o risolvete un problema.
- Messaggi descrittivi: Usate messaggi di commit chiari che descrivano cosa avete fatto, non come lo avete fatto.
- Controllare sempre: Usate
git statusprima e dopogit addper verificare quali file state per committare. - Push regolari: Fate push regolarmente su GitHub per avere un backup del vostro lavoro e per condividere le modifiche con il vostro compagno di coppia.
Se avete modificato i file sia in Eclipse che altrove e ci sono conflitti:
# Scaricare le ultime modifiche dal repository
git pull
# Risolvere eventuali conflitti manualmente
# Poi aggiungere i file risolti e committare
git add .
git commit -m "Risoluzione conflitti"
git pushVedere il file LICENSE per i dettagli.