Mutithreaded chat in windows C++ : i'm trying to do a simple multithreaded client/server chat but i have a problem, the program go in a loop without show any message, all i have is the message "Received: " and nothing more.
Here the codes
Server code:

    #pragma comment(lib, "WS2_32.lib") // link con Ws2_32.lib
    #include <Winsock2.h>
    #include <Windows.h> //Windows.h viene comunque inclusa dentro a Winsock2.h
    #include <iostream>
    #include <cstdio>
    #include <pthread.h>

    #define DEFAULT_PORT 54345 //Stabilisco come porta principale la 54345

    using namespace std;

    void *ricezione(void *)
    {
	    SOCKET client;
	    long app;
	    char buff[256];
	    memset(&buff,0,sizeof(buff));
	    while(1)
	   {
		    memset(&buff,0,sizeof(buff));
		    app=recv(client,buff,sizeof(buff), 0);
		    if(app<0) cout<<"Impossibile ricevere messaggio"<<endl;
		    else cout<<"Client: "<<buff<<endl;	
	    }
    }

    int main() 
    {
	    pthread_t threadA[5];
	    cout<<"Server TCP/IP"<<endl; 
	    char recvbuf[256]; //Buff di ricezione messaggio
	    char serverAddrStr[256]={'\0'}; //Contiene indirizzo IP da inserire,         all'inizio è vuoto
	   #ifdef WIN32       //Mi preparo per l'utilizzo della winsocket (Serve per forza)
	   WSADATA wsaData;
	   WSAStartup (0x0101,&wsaData);
	   #endif
	   long res; //Variabile utile
	   WSADATA wsadata; //La winsocket
	   res = WSAStartup(MAKEWORD(2, 1), &wsadata); //Prendo dll winsocket e la inizializzo
	   if(res==0) cout<<"Winsocket inizializzata con successo!"<<endl;   //Controllo sull'inizializzazione della winsocket
	   else cout<<"Errore nell'inizializzazzione della winsocket'"<<endl;
	   SOCKET slisten,client; //Dichiaro i Socket Descriptor
	   cout<<"Inserisci indirizzo al quale connettersi: ";
	   cin.getline(serverAddrStr,256);
	   slisten=socket(AF_INET,SOCK_STREAM,0); //Creo il socket
	   if(slisten!=INVALID_SOCKET) cout<<"Socket creato con successo!"<<endl;
	   else cout<<"Errore nella creazione del socket"<<endl;
	   //Varie informazioni del socket
	   sockaddr_in info; //sockaddr
	   info.sin_addr.s_addr=INADDR_ANY; //Accetto chiunque
	   info.sin_family=AF_INET; //Famiglia di protocolli
	   info.sin_port=htons(54345); //Converto la porta nell'ordine (big-endian) del TCP/IP - Più significativo meno significativo
	   int infolen=sizeof(info); //Variabile utile a contenere la dimensione della sockaddr
	   res=bind(slisten,(struct sockaddr*)&info, infolen); //Avvio collegamento server-client
	   if(res!=SOCKET_ERROR) cout<<"Connessione avvenuta con successo!"<<endl; //Controllo se la connessione è avvenuta correttamente
	   else cout<<"Errore di connessione..."<<endl;
	   res=listen(slisten,SOMAXCONN); //Avvio ascolto client e ascolto il numero massimo di connessioni
	   if(res!=SOCKET_ERROR) cout<<"Sono in ascolto sulla porta 54345"<<endl; //Controllo se è possibile mettersi in ascolto sulla porta 54345
	   else cout<<"Impossibile mettersi in ascolto sulla porta 54345"<<endl;
	   sockaddr_in clientinfo; //Struttura che contiene le informazioni del client
	   int clientinfolen=sizeof(clientinfo); //Lunghezza struttura clientinfo, mi serve per dopo
	int nthread=0;
	   while(nthread<5) //Ciclo fino a quando posso
	   {
		   clientinfolen= sizeof(clientinfo);
		   cout<<"Sono in ascolto di un client"<<endl;
		   cout<<"nthread: "<<nthread<<endl;
		   client=accept(slisten,(struct sockaddr*)&clientinfo,&clientinfolen); //Avvio la comunicazione
		   if(client<0) 
		   {
			   cout<<"Non posso accettare la connessione"<<endl;
			   return 0;
		   }
		   cout<<"Connessione riuscita"<<endl;
		   res=pthread_create(&threadA[nthread],NULL,ricezione,NULL);
		   if(res!=0) cout<<"Errore creazione thread"<<endl;
		   nthread++;
	   }
	   for(int i=0;i<5;i++) pthread_join(threadA[i],NULL);
	   closesocket(client); //Chiudo socket client
	   closesocket(slisten); //Chiudo socket server
	   WSACleanup(); //Termino utilizzo delle Winsock
	
	   system("PAUSE");
	   return 0;
    }

And here the client code:

    #pragma comment(lib,"ws2_32.lib")
    #include <cstdio>
    #include <iostream>
    #include <WinSock2.h>
    #include <Windows.h>

    using namespace std;

    int main() 
    {
	     cout<<"Client TCP/IP"<<endl;
	     char sendbuf[256]; //Buffer di invio
	     long res; //Variabile utile
	     WSADATA wsadata; //Variabile che contiene informazioni Winsocket
	     SOCKET sConnect; //Variabile di tipo socket
	     sockaddr_in conpar;
	     res=WSAStartup(MAKEWORD(2,0),&wsadata); //Mi preparo per l'utilizzo delle winsocket
	     if(res==0) cout<<"Inizializzazione della winsocket avvenuta con successo!"<<endl; //Controllo creazione winsocket
	     else cout<<"Inizializzazione della winsocket fallita"<<endl;
	     sConnect=socket(AF_INET,SOCK_STREAM,0); //Creo la socket
	     if(sConnect!=INVALID_SOCKET) cout<<"Socket creato con successo!"<<endl; //Controllo creazione socket
	     else cout<<"Errore nella creazione del socket, errore: "<<WSAGetLastError()<<endl;
	     hostent *serverInfo; //Struttura che contiene le informazioni dell'host
	     char serverAddrStr[256]; //Indirizzo IP
	     cout<<"Inserisci l'indirizzo al quale connettersi: ";
	     cin.getline(serverAddrStr,256); //prendo indirizzo IP in input
	//Inserisco informazioni nella struttura conpar
	     conpar.sin_addr.S_un.S_addr=inet_addr(serverAddrStr); //Indirizzo al quale connettersi
	     conpar.sin_family=AF_INET; //Famiglia di protocolli che accetto
	     conpar.sin_port=htons(54345); //Porta al quale connettersi in formato big-endian
	     int conparlen=sizeof(conpar); //Dimensione struttura
	     res=connect(sConnect,(struct sockaddr*)&conpar,conparlen); //Connessione
	     if(res!=SOCKET_ERROR) cout<<"Connessione avvenuta con successo!"<<endl; //Controllo sulla connessione
	     else cout<<"Connessione fallita, errore: "<<WSAGetLastError()<<endl;
	     while(1) //Ciclo fino a quando non chiudo
	     {
		     memset(&sendbuf,0,sizeof(sendbuf)); //Inizializzo buffer di invio a 0
		     cout<<"Invia: ";
		     cin.getline(sendbuf,256);; //Prendo messaggio
		     res=send(sConnect,sendbuf,strlen(sendbuf),0); //Invio messaggio
	     }
	     closesocket(sConnect); //Chiudo socket
	     WSACleanup(); //Termino utilizzo winsocket
	
	     system("PAUSE");
	     return 0;
     }
I'm using posix thread in windows system with the package installated.
Thanks all for the help :)
