linux广播通讯

来源:互联网 发布:阿里云备案幕布多少钱 编辑:程序博客网 时间:2024/06/09 15:29

发送端

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdlib.h>

int main(void)
{
  int sockfd;
  struct sockaddr_in baddr;
  int addr_len=sizeof(baddr);
  char buf[100];
  bzero(&baddr,sizeof(baddr));

  /***AF_INT*网络SOCKET**************/
  baddr.sin_family=AF_INET;
 /***********通讯端口9000************/
  baddr.sin_port=htons(9000);    
  /***192.168.1.255***是192.168.1网段的广播的地址*****/
  baddr.sin_addr.s_addr=inet_addr("192.168.1.255"); 
  /******************/
  if((sockfd= socket(AF_INET,SOCK_DGRAM,0))<0)
  {
    perror("socket:");
 exit(-1);
  }
  /******************广播发送端不需要地址绑定*******/
  //bind(sockfd,(struct sockaddr*)&baddr,&addr_len);
  /******************设置sockfd 为网络广播方式*******/
  int on=1;
  setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
  while(1)
  {
      fgets(buf,10,stdin);
      /******************通过广播地址发送*************/
      sendto(sockfd,buf,10,0,(struct sockaddr*)&baddr,sizeof(baddr));

  }
}

 

接受端

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdlib.h>

int main(void)
{
  int sockfd;
  struct sockaddr_in baddr;
  struct sockaddr_in rcvd;
  int addr_len=sizeof(baddr);
  char buf[100];
  bzero(&baddr,sizeof(baddr));

  baddr.sin_family=AF_INET;
  /**********接受端的端口必须与发送端口一致**********/
  baddr.sin_port=htons(9000);
  /**********0.0.0.0 代表本地通讯接口***************/
  baddr.sin_addr.s_addr=inet_addr("0.0.0.0");

  if((sockfd= socket(AF_INET,SOCK_DGRAM,0))<0)
  {
    perror("socket:");
 exit(-1);
  }
  /******************绑定通讯端口*******************/
  bind(sockfd,(struct sockaddr*)&baddr,addr_len);
  /******************设置通讯模式为广播模式*********/
  int on=1;
  setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
  while(1)
  {
   //fgets(buf,10,stdin);
      /*************打印接受端口******************/
      recvfrom(sockfd,buf,10,0,(struct sockaddr*)&rcvd,&addr_len);
      printf("%d\n",ntohs(rcvd.sin_port));
  }
}

 


 

原创粉丝点击