当前位置: 首页 > 编程笔记 >

C++广播通信实例

闾丘玺
2023-03-14
本文向大家介绍C++广播通信实例,包括了C++广播通信实例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了C++实现广播通信的方法。分享给大家供大家参考。具体实现方法如下:

广播通信代码框架:

1. 协议都是:

SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);

2. 服务端设置选项

BOOL bBroadcast = TRUE;  

::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL));

3. 服务端向255.255.255.255 这个广播地址发内容  客户端收听就可以了

服务端代码:

#include "InitSock.h"  

#include <stdio.h>  

  

VOID main()  

{  

    CInitSock initSock;  

  

    SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);  

    //设置广播就是设置这个选项  

    BOOL bBroadcast = TRUE;  

    ::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL));  

  

    //设置广播地址  

    SOCKADDR_IN bcast;  

    bcast.sin_family = AF_INET;  

    bcast.sin_port = htons(4567);  

    bcast.sin_addr.S_un.S_addr = INADDR_BROADCAST; //::inet_addr("255.255.255.255");  

    printf("begin send the data:\r\n");  

    char sz[] = "this is the broadcast data";  

    while(TRUE)  

    {  

        ::sendto(s, sz, sizeof(sz), 0, (sockaddr*)&bcast, sizeof(bcast));  

        ::Sleep(5000);  

    }  

}

客户端代码:

#include "InitSock.h"  

#include <stdio.h>  

  

void main()  

{  

    CInitSock initSock;  

  

    SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);  

  

    SOCKADDR_IN sin;   

    sin.sin_family = AF_INET;  

    sin.sin_port = ::htons(4567);  

    sin.sin_addr.S_un.S_addr = INADDR_ANY;  

    if (::bind(s, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)  

    {  

        printf("bind error");  

        return;  

    }  

  

    printf("begin recv the broadcast data:\r\n");  

    char sz[256] = {0};  

    SOCKADDR_IN addrRemote;  

    int nLen = sizeof(SOCKADDR_IN); //这里必须设置成这个大小   

    while (TRUE)  

    {  

        int nRet = ::recvfrom(s, sz, sizeof(sz), 0, (sockaddr*)&addrRemote, &nLen);  

        if (nRet > 0)  

        {  

            sz[nRet] = '\0';  

            printf(sz);  

        }  

  

    }  

}

希望本文所述对大家的C++程序设计有所帮助。

 类似资料:
  • 我正在编写一个UDP客户端/服务器应用程序。服务器是广播服务器,它通过特定端口向同一子网上的两个客户端广播。每个客户端接收一个数据报,并向服务器发送一个响应。每个客户端都预先知道服务器的ip地址。 我的客户端基本上与http://man7.org/linux/man-pages/man3/getaddrinfo.3.html,的客户端示例相同,即它使用connect()函数来指定所有传出数据包的e

  • 问题内容: 我正在研究通过多个Android设备之间的Wi-Fi Direct连接进行广播的可能性。我创建了一个简单的消息广播应用程序来测试它是否有效,但是到目前为止,我还无法广播消息。当我尝试发送数据包时,出现 SocketException (网络无法访问): 这是我的代码的本质: 有谁知道在 Android 设备上通过Wi-Fi Direct广播是否真的有效?如果它可以正常工作,我在做什么错

  • 本章介绍 UDP 介绍 ChannelHandler, Decoder, 和 Encoder 引导基于 Netty 的应用 前面的章节都是在示例中使用 TCP 协议,这一章,我们将使用UDP。UDP是一种无连接协议,若需要很高的性能和对数据的完成性没有严格要求,那使用 UDP 是一个很好的方法。最著名的基于UDP协议的是用来域名解析的DNS。这一章将给你一个好的理解的无连接协议所以你能够做出明智的

  • 本文向大家介绍Android中的广播和广播接收器代码实例,包括了Android中的广播和广播接收器代码实例的使用技巧和注意事项,需要的朋友参考一下 BroadcastReceiver不仅可以接收系统广播,也可接收自定义的广播   1.定义一个广播接收器   2.发送广播,定义好action标志,用Intent发送 3.注册只接收指定action的广播接收器 4.取消该广播接收器

  • 问题内容: 谁能告诉我如何实现一个独立的Java客户端来播放FM广播。我在网上搜索找不到有用的东西。我们需要实现的所有API是什么,一旦实现结束,如何对其进行测试? 问题答案: 您可以使用Webservices API访问许多广播网站 我正在在线发布最受欢迎的radio api的链接。 http://www.last.fm/api/radio 使用Java Web Services,您可以轻松地与

  • 输出如下: 如果两个数组的维数不相同,则元素到元素的操作是不可能的。 然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。 如果满足以下规则,可以进行广播: 如果输入在每个维度中的大小与输出大小匹配,或其值正好为 1,则在计算中可它。 如果上述规则产生有效结果,并且满足以下条件之一,那么数组被称为可广播的。 数