Ho un client che ogni tot di secondi invia informazioni ad un server..ma contemporaneamente deve stare in ascolto su una socket per poter stampare le informazioni che il server invia. Questo è il codice:
Codice: Seleziona tutto
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdlib.h>
#define MAX 8192 /* in bytes, 8KB */
#define SERVER_IP "192.168.1.3"
int main() {
int sd; /* Il socket descriptor del client */
struct sockaddr_in server_addr; /* l'indirizzo del server */
char buff[MAX]; /* dati di invio e ricezione */
pid_t pid;
/* Utilizzando la struttura hostent si definisce l'indirizzo del server */
struct hostent *hp;
hp = gethostbyname(SERVER_IP);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(1745);
/* successivamente viene memorizzato nella struttura server_addr */
server_addr.sin_addr.s_addr = ((struct in_addr*)(hp->h_addr)) -> s_addr;
/* Viene creato il socket descriptor */
if((sd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
printf("Errore nella creazione della socket\n");
/* Viene connesso al server */
if(connect(sd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
printf("Errore di connessione al server\n");
pid = fork();
while(1){
if(pid == 0){ /*figlio*/
/* Si inviano alcuni dati */
for(int i=0;i<10;i++){
send(sd, "Dati inviati dal client", strlen("Dati inviati dal client"), 0);
}
}
else if(pid > 0){
/* Si riceve la risposta */
while(1){
recv(sd, buff, sizeof(buff), 0);
if(strlen(buff) != 0){
printf("Risposta del server: %s\n", buff);
memset(buff,'\0',MAX);
}
}
} else {
printf("ERRORE CREARE FIGLIO\n");
exit(-1);
}
}
close(sd);
return EXIT_SUCCESS;
}
in pratica il server riceve solo una volta l'informazione del client mentre il client non riceve nulla dal server
è la prima volta che mi cimento nell'uso dei processi in C, quindi non riesco a capire cosa e dove sbaglio. Potete aiutarmi?
Grazie mille anticipatamente e buona serata