il server...
codice:
#pragma comment (lib, "Ws2_32.lib")
#include<Windows.h>
#include<stdio.h>
#include<winSock2.h>
#include<stdlib.h>
#include <pthread.h>

#define LMITT 30
#define LOGG 150
#define LTEXT 500
#define PORTA 1101
#define LBUFF 10
#define LMAX (LMITT+LOGG+LTEXT)
#define FILENAME "bacheca.txt"
typedef struct {

	char mittente[LMITT];
	char oggetto[LOGG];
	char testo[LTEXT];
	int numeroMessaggio;
	
	} Messaggio;
	
//VARIABILI GLOBALI
SOCKET socket_server;
SOCKET connessione;
Messaggio messaggio;
int codiceAzione;
int flag=0; //DA VERIFICARE!!!
HANDLE bacheca;
DWORD tid;
FILE fileAppoggio;
int contatoreMessaggi=1;
HANDLE thred_lavoratore;
char nome[]="Bacheca_Elettronica";
WNDCLASS parametriFinestra;
char* mesSospensione="...Sospensione...";
UINT mex_type_sosp=0;
HWND titolo;


LRESULT CALLBACK WndProc(HWND hWindow, UINT message, WPARAM wParam, LPARAM lParam) {

	switch(message) {
		
		case WM_CREATE:
			return 0;
	
		default:
			if(message==mex_type_sosp) {
			
				printf("...impossibile comunicare con il client... \n");
				flag=1;
				closesocket(socket_server); //VERIFICARE SE FUNZIONA CON SOCKET_SERVER
				ExitThread(0);
				}
			else 
				return(DefWindowProc(hWindow,message,wParam,lParam));
	}
}

void gestioneFinestre() {

	//nuovo tipo di messaggio evento
	mex_type_sosp=RegisterWindowsMessage((LPCSTR)mesSospensione);
	if(!mex_type_sosp) {
	
		printf("ATTENZIONE: errore nella creazione del messaggio --> Server",GetLastError());
		fflush(stdout);
		ExitProcess(-1);
	}
	
	//settiamo i parametri della finestra
	parametriFinestra.style=CS_HREDRAW|CS_VREDRAW;
	parametriFinestra.lpfnWndProc=WndProc;
	parametriFinestra.cbClsExtra=0;
	parametriFinestra.cbWndExtra=0;
	parametriFinestra.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	parametriFinestra.hInstance=NULL;
	parametriFinestra.hCursor=LoadIcon(NULL,IDC_ARROW);
	parametriFinestra.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	parametriFinestra.lpszClassName=(LPCSTR)nome;
	parametriFinestra.lpszMenuName=NULL;
	
	//creo un evento
	if(!RegisterClass(&parametriFinestra)) {
	
		printf("\n ATTENZIONE: errore nella creazione dell'evento --> Server \n");
		fflush(stdout);
		}
		
	//creo la finestra
	titolo=CreateWindow((LPCSTR)nome, 
									(LPCSTR)"Bacheca Elettronica", 
									WS_OVERLAPPEDWINDOW, 
									CW_USEDEFAULT, 
									CW_USEDEFAULT, 
									CW_USEDEFAULT, 
									CW_USEDEFAULT, 
									NULL, NULL, NULL, NULL);
	
	if(titolo==INVALID_HANDLE_VALUE) {
		
		printf("\n ATTENZIONE: errore nella creazione della finestra --> Server \n", GetLastError());
		fflush(stdout);
		ExitProcess(-1);
		}
}

void letturaMessaggi(SOCKET connessione, HANDLE bacheca) {  //VERIFICARE --> AL POSTO DI DS_SOCKET POTREBBE ANDARCI LA SOCKET VERA E PROPRIA!!
	
	//VARIABILI LOCALI AL METODO
	int dim_file;
	char dimensione[LBUFF];
	int contatore=0;
	char dati[LMAX];
	DWORD datiLetti=0;
	
	printf("\n ...lettura messaggi in corso... \n");
	
	if((dim_file=SetFilePointer(bacheca,0,0,FILE_END))==INVALID_SET_FILE_POINTER) {	//ACQUISISCO LA DIMENSIONE DEL FILE DA INVIARE AL CLIENT
		
		printf("\n ATTENZIONE: non si può determinare la dimensione del file! \n");
		}
		
	itoa(dim_file,dimensione,15); //converte dimensione_file in una stringa dimensione per poterla inviare al server
	
	if(write(connessione,dimensione,sizeof(dimensione),0)<0) {
	
		printf("\n ATTENZIONE: errore nell'invio dimensione del file \n");
		flag=0;
		//PostMessage(hWindow,mex_type_sosp,0,0);
		ExitThread(-1);
		}
		
	//LEGGIAMO IL FILE DA INVIARE AL CLIENT
	if(SetFilePointer(bacheca,0,0,FILE_BEGIN)==INVALID_SET_FILE_POINTER) printf("\n ATTENZIONE: errore nel riposizionamento del file pointer \n");
	
	while(contatore<dim_file) {
	
		memset(&dati,0,sizeof(dati));
	
		if(ReadFile(bacheca,&dati,LMAX,&datiLetti,0)==0) printf("\n ATTENZIONE: errore nella lettura del file \n");
		
		printf("\n ...invio dati in corso... \n");
		
		int invio=write(connessione,dati,sizeof(dati),0);
		
		if(invio<0) {
		
			printf("\n ATTENZIONE: errore nell'invio dei dati al client \n");
			flag=0; //DA VERIFICARE
			//PostMessage(hWindow,mex_type_sosp,0,0);
			ExitThread(-1);
			
			}
			
		contatore=SetFilePointer(bacheca,0,0,FILE_CURRENT); //RIPOSIZIONA IL FILE POINTER DAL PUNTO IN CUI ERA ARRIVATO
		
		if(contatore==INVALID_SET_FILE_POINTER) printf("\n ATTENZIONE: errore nel riposizionamento del file_pointer \n");
	} //FINE DEL FILE
	
	printf("\n BACHECA INVIATA CORRETTAMENTE AL CLIENT \n");
}

DWORD WINAPI lavoro(void* no_value) {

	//VARIABILI LOCALI AL METODO
	
	
	//INIZIALIZZAZIONE VARIABILI LOCALI
	
	
	//IDENTIFICHIAMO L'UTENTE
	
	memset(&messaggio.mittente,0,sizeof(messaggio.mittente));
	
	if(read(connessione,messaggio.mittente,sizeof(messaggio.mittente),0)<0) {
	
		printf("\n ATTENZIONE: errore nella ricezione del mittente \n");
		flag=0; //VERIFICARE A COSA SERVE!!!!!
		ExitThread(1);
		}
		
	else {
	
		printf("MITTENTE: \n");
		printf("%s\n",&messaggio.mittente);
		}
		
	//RICEVIAMO LA RICHIESTA FATTA AL SERVER
	
	while(1) {
	
		if(read(connessione,messaggio.mittente,sizeof(codiceAzione),0)<0) {
		
			printf("\n ATTENZIONE: la richiesta non è stata ricevuta \n");
			flag=1; //VERIFICARE
			ExitThread(1);
		}
		
		else {
		
			printf("\n La richiesta ricevuta è: \n");
			printf("%s\n", &codiceAzione);
		}
		
		
		switch(codiceAzione) {
	
		case '1':
		
			 letturaMessaggi(connessione,bacheca);
			
		case '2':
		
			 scritturaMessaggi(connessione,bacheca);
	
		case '3':
		
			 cancellazioneMessaggi(connessione,bacheca);
		
		case '4':
		
			 printf("\n SESSIONE CHIUSA \n");
			 
			 if(closesocket(connessione)==SOCKET_ERROR) {
			 
				printf("\n ATTENZIONE: errore nella chiusura della socket \n");
				flag=1;
				ExitThread(0);
			}
			
		}
	}
}

int Init_WinSocket(void) {

	WSADATA data; //contiene le primitive di winSock
	WORD w;
	int err=0; //gestisce gli errori
	
	w=MAKEWORD(2,2); //la variabile w contiene la versione della wsock32.dll
	err=WSAStartup(w,&data); //inizializzo la wspck32.dll verificando la mancanza di errori
	
	if(err!=0) {
	
		printf("WSAStartup fallito \n");
		
		return 0;
		}
	
	return 1;
	
}

int main() {
	
	//VARIABILI LOCALI AL MAIN
	HANDLE thread_lavoratore;
	int stato_thread;

	struct sockaddr_in server;
	struct sockaddr_in client;
	
	int descrittore_server;
	int descrittore_client;
	
	//GESTIAMO LA CONNESSIONE DEL SOCKET DEL SERVER
	memset(&server,0,sizeof(server));
	
	printf("\n ...inizializzazione server... \n");
	
	server.sin_family=AF_INET;
	server.sin_port=htons(PORTA);
	server.sin_addr.s_addr=htonl(INADDR_ANY); //INADDR_ANY SPECIFICA CHE POSSO RICEVERE CONNESSIONI DA QUALSIASI INDIRIZZO
	
	if(!Init_WinSocket())
		exitWSA(1);
	
	if((descrittore_server=socket(AF_INET, SOCK_STREAM,0))<0) {
	
		printf("\n ATTENZIONE: errore nella creazione della socket --> Server \n");
		exit(-1);
	
		}
		
	//FACCIAMO LA BIND!!
	//ASSOCIA INDIRIZZO ALLA SOCKET
	int esito_bind=bind(socket_server, (struct sockaddr *)&server, sizeof(server)); 
	if(esito_bind<0) {
	
		printf("\n ATTENZIONE: c'è stato un errore nella bind --> Server \n");
		exit(-1);
	
		}
	
	//METTIAMO IL SERVER IN ASCOLTO DI RICHIESTE DA PARTE DEL CLIENT
	if(listen(socket_server,1)==SOCKET_ERROR) {
	
		printf("\n ATTENZIONE: errore nella funzione listen --> Server \n");
		exitProcess(0);
		
		}
	
	int LClient = sizeof(client);
	while(1) {
		
		printf("\n ...accettazione del client... \n");
		connessione=accept(socket_server, (struct sockaddr *)&client, &LClient);
		if(descrittore_client<0) {
		
			if(errno!=EINTR) {
				printf("\n ATTENZIONE: errore accept --> Server \n");
				exit(-1);
			}
		}
		
		else {
			
			void *desc = (void *) &descrittore_client;
			//ATTIVIAMO IL THREAD CHE FARà IL LAVORO DEL SERVER
			
			if((thread_lavoratore=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)lavoro,NULL,NORMAL_PRIORITY_CLASS,&tid))==INVALID_HANDLE_VALUE) {
			
				printf("\n ATTENZIONE: errore nella creazione del thread --> Server \n");
				ExitProcess(0);
			}
			
			
		}
	}
}
e gli errori che mi da...

codice:
C:\Users\Admin\Desktop\BachecaElettronica\Server>gcc server.c
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0x3e): undefined re
ference to `closesocket@4'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0x87): undefined re
ference to `RegisterWindowsMessage'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0x13c): undefined r
eference to `GetStockObject@4'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0x9f8): undefined r
eference to `closesocket@4'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xa57): undefined r
eference to `WSAStartup@8'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xac5): undefined r
eference to `htons@4'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xad8): undefined r
eference to `htonl@4'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xaf3): undefined r
eference to `exitWSA'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xb0f): undefined r
eference to `socket@12'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xb4f): undefined r
eference to `bind@12'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xb88): undefined r
eference to `listen@8'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xba8): undefined r
eference to `exitProcess'
C:\Users\Admin\AppData\Local\Temp\ccTIyHn3.o:server.c:(.text+0xbd9): undefined r
eference to `accept@12'
collect2: ld returned 1 exit status

C:\Users\Admin\Desktop\BachecaElettronica\Server>
e questi sono gli errori che mi da...
sono disperata!!!