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







  • 相关阅读:
    Android开发视频教学第一季(116集)视频&源码下载
    Android开发视频教学第一季(1734集)视频源码下载
    老罗Android开发视频教程( android解析json数据 )4集集合
    Android 亲测源码分享
    老罗Android开发视频教程 (android常用UI编程) 25集集合
    老罗Android开发视频教程 (android常用布局介绍)5集集合
    老罗Android开发视频教程 (android解析xml文件 )3集集合
    Android 开发源码分享
    基于R语言的时间序列分析预测
    .NET新手系列(六)
  • 原文地址:https://www.cnblogs.com/lvdh1314/p/6506749.html
Copyright © 2011-2022 走看看