Salve a tutti ecco i codici che ho provato a fare:
Client:
codice:
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<arpa/inet.h>
#include<errno.h>

#define MAXSIZE 10

int main(int argc, char *argv[])
{
	/* Variabili */
	struct sockaddr_in Serv;
	char remoteIpAddress[30] = "151.1.244.200"; /* www.html.it */
	short int remotePortNumber = 8888;
	int socketfd, ris;
	struct hostent * host;
	char msg[MAXSIZE];
	char buffer[MAXSIZE];
	int i, len, nwrite, nread, n;
	
	/* azzero l'area della struct */
	memset(&Serv, 0, sizeof(Serv));
	
	/* imposto il messaggio da inviare al server */
	for(i=0; i<MAXSIZE; i++)
		msg[i] = 'a';
	msg[MAXSIZE-1] = '\0';

	/* creo la socket per il client */
	if((socketfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
		perror("Errore nella creazione della soccket");
		exit(1);
	}
	
	if(argc > 1)
	{
		/* risoluzione indirizzo tramite il DNS */
		if((host = gethostbyname(argv[1])) == NULL)
		{
			printf("Errore nella risoluzione del nome del dominio\n");
			exit(1);
		}
		/* setto sin_addr per l'host remoto */
		memmove((char *)&Serv.sin_addr, (char *)host->h_addr_list[0], 4);
	}
	else
	{
		if((Serv.sin_addr.s_addr = inet_addr(remoteIpAddress))== INADDR_NONE)
		{
			printf("Errore nella inet_addr\n");
			exit(1);
		}
	}


	/* setto la struct soccaddr_in per l'host remoto (n.b. il campo sin_addr è già settato) */
	Serv.sin_family = AF_INET;
	Serv.sin_port = htons(remotePortNumber);

	/* Debug */
	printf("mi sto per connettere a: %s\n", inet_ntoa(Serv.sin_addr));

	/* richiesta connessione */
	if((ris = connect(socketfd, (struct sockaddr*) &Serv, sizeof(Serv))) == -1)
	{
		perror("Errore durante la connessione");
		exit(1);
	}

	/* Effettuo la scrittura del messaggio da inviare al server sulla socket */
	len = strlen(msg) + 1;
	nwrite = 0;
	while((n = write(socketfd, &(msg[nwrite]), len-nwrite)) > 0)
		nwrite += n;

	printf("Scrittura eseguita\n");

	/* Effettuo la lettura della risposta del server */ 
	nread=0;
	while((len > nread) && ((n = read(socketfd, &(buffer[nread]), len-nread)) >0))
	{
		nread += n;
		printf("read effettuata, risultato n=%d len=%d nread=%d len-nread=%d\n", n, len, nread, len-nread);
		fflush(stdout);
	}       

	/* Stampo la risposta del server */
	printf("Il server dice: %s\n", buffer);
	fflush(stdout);     

	/* chiusura */
	if((close(socketfd)) == -1)
	{
		perror("Errore durante la chiusura della socket");
		exit(1);
	}

	return 0;
}
e il server:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>

#define SIZEMSG 1000000

int main(int argc, char* argv[]){

	struct sockaddr_in Local;
	int returnSocket,socketAccept,returnListen,returnWrite,returnRead,returnBind;
	int nwrite,nread,len,i,porta;
	char buffer[SIZEMSG];

	memset((void *)&Local,0,sizeof(Local));

/*	Controllo prametri passati da comando	*/
	if(argc!=2){
		puts("Errore, mancano alcuni parametri fondamentali:");
		puts("Usage: ./server numeroPorta");
		exit(EXIT_FAILURE);
	}

/*	Apertura socket 	*/
	porta=atoi(argv[1]);
	returnSocket = socket(AF_INET,SOCK_STREAM,0);

	if(returnSocket==-1)
	{
		perror("Errore nella creazione del socket");
		exit(EXIT_FAILURE);
	}

/*	Riempiamo la struttura coi dati necessari alla connessione ed effettuo la bind()	*/
	Local.sin_family = AF_INET;
	Local.sin_port = htons(porta);
	Local.sin_addr.s_addr = htonl(INADDR_ANY);
	returnBind = bind(returnSocket,(struct sockaddr*)&Local,sizeof(Local));

	if(returnBind == -1){
		perror("Errore nella funzione bind()");
		exit(EXIT_FAILURE);
	}

/*	Effettuo la listen()	*/
	returnListen = listen(returnSocket,10);

	if(returnListen == -1){
		perror("Errore nella funzione listen()");
		exit(EXIT_FAILURE);
	}

	printf("In stato di listen\n");

/*	Effettuo la accept()	*/
	while(1)
	{
		socketAccept = accept(returnSocket,(struct sockaddr *)NULL,NULL);

		if(socketAccept == -1){
			perror("Errore nella funzione accept()");
			exit(EXIT_FAILURE);
		}

		printf("Ho accettato la connessione di un client\n");

          /*	Eseguo la lettura del client	*/
		len = 15;
		nread = 0;
		while( (len>nread) && ((returnRead=read(socketAccept,&(buffer[nread]),len-nread ))>0) )
			nread+=returnRead;

		printf("Stringa ricevuta dal client: %s\n",buffer);
		fflush(stdout);

	  /*	Eseguiamo la scrittura	 */
		nwrite = 0;
		len = strlen(buffer) + 1;
		while ( (returnWrite=write(socketAccept,&(buffer[nwrite]),len-nwrite)) > 0 )
			nwrite+=returnWrite;

		printf("Ho inviato: %s al client\n", buffer);
		fflush(stdout);

		close(socketAccept);

		printf("Ho chiuso la connessione con il client\n");
		fflush(stdout);
	}

	return 0;
}
Il problema è sicuramente nel server perchè il client l'ho provato con un'altra versione del server e funziona. In pratica quando lancio il client si pianta. Non capisco proprio dove sto sbagliando...
Grazie.