nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

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
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