per il momento questi due programmi funzionano, ma i cicli for per l'invio di piu stringhe li ho messi esterni a WSAStartup e WSACleanup, quindi ad ogni invio di stringa il server si riavvia e il client ricerca l'ip e si riconnette... come posso evitare che i due programmi si riavviino ogni volta??? grazie ciao

CLIENT
codice:
#include <windows.h>
#include <winsock.h> //includo le varie librerie tra cui quella winsock
#include <stdio.h>

int main(int argn,char **argv)
{
    
    int err = 0;
    
SOCKET sock; // creo la socket chiamato sock che userò nella connessione
struct sockaddr_in sock_addr; // inizializzo la socket
WSADATA data;  // inizializzo la variabile che contiene le primitive di Winsock
WORD p;
p=MAKEWORD(2,0);  // creo la variabile p che contiene la versione della wsock32.dll

char messaggio[2000];
int errori = 0;
for (int x=0;;x++){

err = WSAStartup(p,&data); // inizializzo la wsock32.dll verificandone la mancanza di errori



sock=socket(PF_INET,SOCK_STREAM,0);  // creo la socket indicandone le caratteristiche
sock_addr.sin_family=PF_INET; // indico il protocollo utilizzato (TCP/IP)
sock_addr.sin_port=htons(1111); //indico la porta a cui connettere la socket
sock_addr.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP
sock_addr.sin_addr.S_un.S_un_b.s_b2=0;
sock_addr.sin_addr.S_un.S_un_b.s_b3=0;
sock_addr.sin_addr.S_un.S_un_b.s_b4=1;

err = connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr)); // mi connetto all'indirizzo scelto
 
 //*********************dialogo***********************//

if (x==0){
 	char mex[2000];
 	recv(sock,mex,2000,0);

 	 printf("FROM server: %s",mex); 	 
    }
          

 	 	
 	 	printf("commands> ");
 	 	gets(messaggio);
 	 	if (messaggio[0] == 'e' && messaggio[1] == 'x' && messaggio[2] == 'i' && messaggio[3] == 't') break;
 
 	errori = send(sock,messaggio,2000,0);
 	
 if (errori == 2000){
    		printf("2000 comando:  %s\n",messaggio);
     }else {	printf("errore send() %d\n" ,errori); }
		

 
closesocket(sock);  // chiudo la socket
WSACleanup();       //libero le risorse utilizzate dalla libreria Winsock

}//end for


printf("\n\n%d\n",err);


return 0;
}
SERVER
codice:
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#define MAX_STRING 256

int main(int argn,char **argv){
	SOCKET miosock,client;
	struct sockaddr_in miosock_addr,client_addr;
	WSADATA data;
	WORD p;
	int len(char *);
	int lun, err=0;
	char mex[]="SERVER attivo: in attesa di messaggi!!!\n";
	p=MAKEWORD(2,0);
	
		   for(;;){
	
	err=WSAStartup(p,&data);

	
	miosock=socket(PF_INET,SOCK_STREAM,0);
	miosock_addr.sin_family=PF_INET;
	miosock_addr.sin_port=htons(atoi("1111"));
	miosock_addr.sin_addr.s_addr=INADDR_ANY;
    	err=bind(miosock,(struct sockaddr*)&miosock_addr,sizeof(struct sockaddr_in));
	err=listen(miosock,1);
	lun=sizeof (struct sockaddr);
	client=accept(miosock,(struct sockaddr*)&client_addr,&lun);
	if (err!=0) printf ("Errore connessione");
	
	//**************dialogo***************//
	
	send(client,mex,sizeof(mex),0);
	
	 	char mex2[2000];

 	recv(client,mex2,2000,0);
printf("%s\n\n",mex2);


	
	
	closesocket (client);
	closesocket(miosock);

	WSACleanup();
	
	
}//chiusura for
	
	
//end

	system("pause");
	
	return 0;
}