broadcast funzt net
-
morgen
ich eigne mir grad den stevens an und mache nach jedem kapitel ein porgrämchen um das geteste zu lernen. erstmal wollte ich nur das programm vom buch ausprovieren aber selbst das geht nicht
ich habe die funktion dg_cli vom broadcast kapitel genommen und einen anderen echo client und die ganze geschichte so umgebaut das es funzt
ich habe 2 daytime server gestartet. wenn ich sie mit
./a.out 192.168.0.1
s
from : Tue Jan 13 20:11:32 200
./a.out 192.168.0.133
s
from : Tue Jan 13 20:11:32 200das geht beides. mache ich aber nun den sinn der sache, nähmlich den bcast, kommt
./a.out 192.168.0.255
a
Broken pipeder code
#include "unp.h" void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen); static void recvfrom_alarm(int); int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr; if (argc != 2){ puts("usage: tcpcli <IPaddress>"); exit(0);} sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13); inet_pton(AF_INET, argv[1], &servaddr.sin_addr); connect(sockfd, (SA*) &servaddr, sizeof(servaddr)); dg_cli(stdin, sockfd, (SA*) &servaddr, sizeof(servaddr)); exit(0); } void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) { int n; const int on = 1; char sendline[MAXLINE], recvline[MAXLINE + 1]; socklen_t len; struct sockaddr *preply_addr; preply_addr = malloc(servlen); setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)); while (fgets(sendline, MAXLINE, fp) != NULL) { sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen); for ( ; ; ) { len = servlen; n = recvfrom(sockfd, recvline, MAXLINE, 0, preply_addr, &len); puts("test"); if (n < 0) { if (errno == EINTR) break; /* waited long enough for replies */ else { //err_sys("recvfrom error"); puts("recverror"); exit(0); } } if ( n == 0) exit(0); else { recvline[n] = 0; /* null terminate */ printf("from %s: %s", preply_addr->sa_data, recvline); } } } }
danke
-
achja hab herausgefunden das höchstwahrscheinlich das
sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
die Broken Pipe auslöst
-
hat sich erledigt danke