zoukankan      html  css  js  c++  java
  • UDP广播包

    一,广播地址:

    广播地址是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机号为全1的IP地址为广播地址。例如,对于 :192.168.199.0(掩码:255.255.255.0)网段,其广播地址为192.168.199.255 (255 即为2进制的11111111 ),当发出一个目的地址为192.168.199.255的分组时,它将被分发给该网段上的所有计算机。


    1.直接广播地址


    指Host部分全为1的广播地址。如:192.168.199.255。当某机器发出目的地址为直接广播(如:192.168.199.255)时,路由器通过查找路由表可以转发,直到该网段。


    2.受限广播地址


    也称本地广播地址,它不被路由发送,但会被送到相同物理网络段上的所有主机,IP地址的网络号和主机号 全为1就是地址255.255.255.255,当某机器发出目的地址为本地广播时,路由器不会转发该包。所以该包只能限制在本网段

     

    二,实例

    2.1 server.cpp


        #include <iostream>
        #include <strings.h>
        #include <string.h>
        #include <sys/types.h>     
        #include <sys/socket.h>
        #include <netinet/in.h>
        #include <arpa/inet.h>
        #include <stdio.h>
        #include <stdlib.h>
        using namespace std;
         
        int main()
        {
            int sockfd;
            struct sockaddr_in saddr;
            int r;
            char recvline[1025];
            struct sockaddr_in presaddr;
            socklen_t len;
            
            sockfd = socket(AF_INET, SOCK_DGRAM, 0);
            bzero(&saddr, sizeof(saddr));
            saddr.sin_family = AF_INET;
            saddr.sin_addr.s_addr = htonl(INADDR_ANY);
            saddr.sin_port = htons(9999);
            bind(sockfd, (struct sockaddr*)&saddr, sizeof(saddr));
            while (1)
            {
                r = recvfrom(sockfd, recvline, sizeof(recvline), 0 , (struct sockaddr*)&presaddr, &len);
                if (r <= 0)
                {
                    perror("");
                    exit(-1);
                }
                recvline[r] = 0;
                cout <<"recvfrom "<< inet_ntoa(presaddr.sin_addr) <<" " << recvline << endl;
            }
            return 0;
        }


    2.2 client.cpp


        #include <iostream>
        #include <strings.h>
        #include <string.h>
        #include <sys/types.h>     
        #include <sys/socket.h>
        #include <netinet/in.h>
        #include <arpa/inet.h>
        #include <stdio.h>
        #include <stdlib.h>
        using namespace std;
         
        int main()
        {
            int sockfd;
            struct sockaddr_in des_addr;
            int r;
            char sendline[1024] = {"Hello"};
            const int on = 1;
            
            sockfd = socket(AF_INET, SOCK_DGRAM, 0);
            setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)); //设置套接字选项
            bzero(&des_addr, sizeof(des_addr));
            des_addr.sin_family = AF_INET;
            des_addr.sin_addr.s_addr = inet_addr("192.168.199.255"); //广播地址
            des_addr.sin_port = htons(9999);
            r = sendto(sockfd, sendline, strlen(sendline), 0, (struct sockaddr*)&des_addr, sizeof(des_addr));
            if (r <= 0)
            {
                perror("");
                exit(-1);
            }
            cout << "finish" << endl;
            return 0;
        }
    ---------------------
    作者:lycclsltt
    来源:CSDN
    原文:https://blog.csdn.net/aspnet_lyc/article/details/34444111
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    应用wordpress
    php引入fckeditor编辑工具
    php_bu
    AJAX回调函数
    AJAX 输入框后写提示
    收集几个不错的最新win10系统64位和32位系统Ghost版下载
    曝光最新WIN10系统32位,64位系统ghost版
    微软本月将推Win10 望打破Win8所带来差评影响
    最新官方WIN10系统32位,64位系统ghost版下载
    记一次苦逼的SQL查询优化
  • 原文地址:https://www.cnblogs.com/shelley-AL/p/10724283.html
Copyright © 2011-2022 走看看