Skip to content

Commit

Permalink
广播
Browse files Browse the repository at this point in the history
  • Loading branch information
chankeh committed Aug 4, 2017
1 parent 2031838 commit 099b2a7
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 0 deletions.
55 changes: 55 additions & 0 deletions ch15/broad_recv.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 30

void error_handling(char *message);

int main(int argc, char *argv[]){
int recv_sock;
int str_len;
char buf[BUF_SIZE];
struct sockaddr_in adr;

if(argc != 2){
printf("Usage : %s <port>\n",argv[0]);
exit(1);
}

recv_sock = socket(PF_INET,SOCK_DGRAM,0);
if(recv_sock == -1){
error_handling("socket() error");
}

memset(&adr,0,sizeof(adr));
adr.sin_family=AF_INET;
adr.sin_addr.s_addr=htonl(INADDR_ANY); // ip
adr.sin_port=htons(atoi(argv[1])); //port

if(bind(recv_sock,(struct sockaddr *)&adr,sizeof(adr))==-1){
error_handling("bind error");
}

while(1){
str_len = recvfrom(recv_sock,buf,BUF_SIZE-1,0,NULL,0);
if(str_len < 0){
break;
}
buf[str_len] = 0;
fputs(buf,stdout);
}
close(recv_sock);

return 0;
}

void error_handling(char *message){

fputs(message,stderr);
fputs("\n",stderr);
exit(1);
}
55 changes: 55 additions & 0 deletions ch15/broad_send.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 30

void error_handling(char *message);

int main(int argc, char *argv[]){
int send_sock;
FILE *fp;
char buf[BUF_SIZE];
struct sockaddr_in broad_adr;
int so_brd = 1;

if(argc != 3){
printf("Usage : %s <group><port>\n",argv[0]);
exit(1);
}

send_sock = socket(PF_INET,SOCK_DGRAM,0);
if(send_sock == -1){
error_handling("socket() error");
}

memset(&broad_adr,0,sizeof(broad_adr));
broad_adr.sin_family=AF_INET;
broad_adr.sin_addr.s_addr=inet_addr(argv[1]); //ip
broad_adr.sin_port=htons(atoi(argv[2])); //port

setsockopt(send_sock,SOL_SOCKET,SO_BROADCAST,(void *)&so_brd,sizeof(so_brd));
if((fp = fopen("news.txt","r")) == NULL){
error_handling("fopen");
}

while(!feof(fp)){
fgets(buf,BUF_SIZE,fp);
sendto(send_sock,buf,strlen(buf),0,(struct sockaddr *)&broad_adr,sizeof(broad_adr));
sleep(2);
}
fclose(fp);
close(send_sock);

return 0;
}

void error_handling(char *message){

fputs(message,stderr);
fputs("\n",stderr);
exit(1);
}
Binary file removed ch15/~$多播.docx
Binary file not shown.
Binary file added ch15/广播.docx
Binary file not shown.

0 comments on commit 099b2a7

Please sign in to comment.