Buonasera, ho implementato un server che funge da rubrica telefonica, ad ogni riciesta da parte dei client di inserire o leggere una voce dalla rubrica lui dovrebbe rispondere..
l'ho compilato con 0 errori di sintatssi, giusto qualche warning!
ho anche inserito qualche stampa di controllo nel codice..
MA se mbra che il server sia morto perchè nn genera stampe a video e non comunica col client; anche se devo dire che il client nn dà errori quando si connette al server da cui dovrei dedurre che sono collegati..
posto il codice del server senza il thread che genera, vi chiedo di dirmi per quale motivo il server è per modo di dire "addormentato". GRAZIE
codice:
#include <pthread.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define SERV_PORT 3092 /*porta del server*/
#define BACKLOG 10 /*lunghezza max delle connessioni in arrivo*/
#define MAXLINE 1024 /*lunghezza del buffer di lettura/scrittura*/
#define MAXN 16384 /*numero max di bytes*/
struct elemrubrica
{
char nome[50];
char cognome[50];
char numtel[50];
};
int main(int argc, char** argv[])
{
void *rubrica(void *); /*prototipo del run del thread*/
int connectsock, listensock, n; /*socket di connessione, socket di ascolto,
*e variabile per memorizzare l'id del
*thread*/
pthread_t tid; /*variabile che rappresenterà il futuro thread*/
struct sockaddr_in serveraddr; /*struttura che rappresenta gli indirizzi
*per la comunicazione*/
printf("1");
/*controllo sull'assegnazione della socket*/
if((listensock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
fprintf(stderr, "socket error\n");
exit(1);
}
memset((void*)&serveraddr,0,sizeof(serveraddr)); /*azzero la struttura*/
serveraddr.sin_family=AF_INET; /*definisce il protocollo TCP*/
serveraddr.sin_port=htons(SERV_PORT);
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
printf("2");
/*attribuisce l'indirizzo locale della macchina*/
if((bind(listensock,(struct sockaddr *)&serveraddr,sizeof(serveraddr))) < 0)
{
fprintf(stderr, "bind error\n");
exit(1);
}
printf("3");
/*controllo sull'ascolto*/
if(listen(listensock, BACKLOG) < 0 )
{
fprintf(stderr, "listen error\n");
exit(1);
}
/*ciclo infinito*/
while(1)
{
printf("in attessa di connessioni");
/*controllo sull'accettazione della connessione*/
if((connectsock=accept(listensock,NULL,NULL)) < 0)
{
fprintf(stderr, "accept error\n");
exit(1);
}
/*controllo sulla creazione del thread*/
if((n=pthread_create(&tid,NULL,&rubrica, (void *)connectsock)) != 0)
{
fprintf(stderr, "pthread_create error\n");
exit(1);
}
printf("connessione accettata e thread creato");
}
}