Re: BROADCAST
Von: Alexandros (niente_spam@chiedetemela.it) [Profil]
Datum: 15.05.2008 12:58
Message-ID: <2HUWj.309466$%k.407361@twister2.libero.it>
Newsgroup: it.comp.os.linux.development
Datum: 15.05.2008 12:58
Message-ID: <2HUWj.309466$%k.407361@twister2.libero.it>
Newsgroup: it.comp.os.linux.development
Sto provando a fare più o meno la stessa cosa...
Ovvero, ho bisogno di *un* "sender" che invia una stringa a broadcast,
che viene ricevuta *dai* diversi "listener" sulla rete.
Prendendo spunto dal post di Marco, ho scritto il sender come:
int fd1, n, bc=1;
char buffer[26];
struct sockaddr_in broadcast;
broadcast.sin_family¯_INET;
broadcast.sin_port=htons(4999);
inet_aton("255.255.255.255", &broadcast.sin_addr);
/*creo la socket UDP*/
fd1=socket(PF_INET, SOCK_DGRAM, 0);
if (fd1<0) perror("\n socket error "), exit(EXIT_FAILURE);
setsockopt(fd1, SOL_SOCKET, SO_BROADCAST, &bc, sizeof(bc) );
strcpy(buffer, "ALIVE");
n=sendto(fd1, buffer, strlen(buffer), 0, (struct sockaddr *) &broadcast,
sizeof(broadcast));
if (n<0) perror("\n errore sendto "), exit(EXIT_FAILURE);
return 0;
---
Ma il listener? Come diavolo deve essere ?
Ho pensato a:
char str[MAXLINE], buf[BUFLEN];
int n, fd_broad, flag=1;
struct sockaddr_in ascolto;
struct sockaddr_in indirizzo_sender;
socklen_t sender_size=sizeof(indirizzo_sender);
/*indirizzo e porta di esclusivo ascolto*/
ascolto.sin_family¯_INET;
ascolto.sin_port=htons(4999);
ascolto.sin_addr.s_addr=htonl(INADDR_BROADCAST);
/*creo socket UDP*/
fd_broad=socket(PF_INET, SOCK_DGRAM, 0);
setsockopt(fd_broad, SOL_SOCKET, SO_BROADCAST, &flag, sizeof(int));
if ( bind(fd_broad, (struct sockaddr *) &ascolto, sizeof(ascolto)) < 0) {
perror("\n bind error ");
exit(EXIT_FAILURE);
}
/*resta in attesa di ricevere un messaggio in broadcast*/
n=recvfrom(fd_broad, buf, BUFLEN, MSG_PEEK, (struct sockaddr *)
&indirizzo_server, &server_size);
printf("\n task #%d - ricevuto %s da %s \n", getpid(), buf,
inet_ntoa(indirizzo_server.sin_addr) );
---
... ma non funziona !
Ho messo come indirizzo del listener INADDR_BROADCAST, è giusto ?
Ho inoltre provato a cambiarlo in INADDR_ANY sia nel listener che nel
sender e funziona (quindi se il sender manda il messaggio a 0.0.0.0 e il
listener è in ascolto su 0.0.0.0 lo riceve correttamente), ma non è
quello che voglio...
Come fare? Mi aiutate please?
[ Auf dieses Posting antworten ]Antworten
- Alexandros (15.05.2008 19:17)
