zoukankan      html  css  js  c++  java
  • 广播编程之接受者

    广播实现一对多的通信,通过向广播地址发送数据报文实现

    只有udp的程序才能广播,tcp不能

    ----------------------------------------------

    #include <sys/socket.h>
    #include <netdb.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <signal.h>
    #include <time.h>

    int sockfd;

    void sig_handler(int signo)
    {
        if(signo == SIGINT)
        {
            printf("server close ");
            close(sockfd);
            exit(1);
        }
    }

    int main(int argc,char *argv[])
    {
         if(argc < 2)
         {
            fprintf(stderr,"usage:%s port ",argv[0]);
            exit(1);
         }
        
         if(signal(SIGINT,sig_handler)== SIG_ERR)
         {
            perror("signal sigint error");
            exit(1);
         }
        
         /*步骤1 创建socket*/
         sockfd = socket(AF_INET,SOCK_DGRAM,0);
         if(sockfd < 0)
         {
            perror("socket error");
            exit(1);
         }
        
        
        
         /*步骤2:调用bind函数对socket和地址进行绑定*/
         struct sockaddr_in serveraddr;
         memset(&serveraddr,0,sizeof(serveraddr));
         serveraddr.sin_family = AF_INET;
         serveraddr.sin_port = htons(atom(argv[1]));
         serveraddr.sin_addr.s_addr = INADDR_ANY;
         if((bind(sockfd,(struct sockaddr*)&serveraddr,
                          sizeof(serveraddr))) < 0)
          {
            perror("bind error");
            exit(1);
          }
          
        
          char buffer[1024];
          struct sockaddr_in clientaddr;
          socklen_t len= sizeof(clientaddr);
          while(1)
          {
            memset(buffer,0,sizeof(buffer));
            memset(&clientaddr,0,sizeof(clientaddr));
            if(recvfrom(sockfd,buffer,sizeof(buffer),0,
               (struct sockaddr*)&clientaddr,&len) <0)
               {
                  perror("recvfrom error");
                  exit(1);
               }
             else
             {
                char ip[16];
                inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,
                           ip,sizeof(ip));
                int port = ntohs(clientaddr.sin_port);
                printf("%s(%d):%s ",ip,port,buffer);
             }
          }
          
          return 0;
    }







  • 相关阅读:
    将参数传递给线程(Vc#2005)
    ADO.NET更新ACCESS碰到的怪异问题
    MVCRESTSilverLight 之 MapServiceRoute
    MEF Export 和 Import 委托
    MVCRESTSilverLight 之MainPage.xaml.cs
    设计模式访问者
    MVCRESTSilverLight 之 ViewModels\MainViewModel.cs
    MVCRESTSilverLight 之Api\CustomerApi.cs
    MVCRESTSilverLight 之 RestExample.Model.Silverlight\Customer.cs
    MVCRESTSilverLight 之 HttpConfiguration
  • 原文地址:https://www.cnblogs.com/lvdh1314/p/6506749.html
Copyright © 2011-2022 走看看