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







  • 相关阅读:
    python线程池 ThreadPoolExecutor 的用法
    charles基本配置
    爬取咪哩咪哩动漫视频
    超级鹰识别验证码
    selenium滑动验证
    subprocess模块
    ffmpeg常用命令
    Appium环境搭建(详细)
    appium下载安装及环境配置
    MIPS——无符号乘法
  • 原文地址:https://www.cnblogs.com/lvdh1314/p/6506749.html
Copyright © 2011-2022 走看看