广播通信

广播通信代码框架:

1. 协议都是:

[python]  view plain copy print ?
  1. SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);  

2. 服务端设置选项

[python]  view plain copy print ?
  1. BOOL bBroadcast = TRUE;  
  2. ::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL));  
3. 服务端向255.255.255.255 这个广播地址发内容  客户端收听就可以了

服务端代码:

[python]  view plain copy print ?
  1. #include "InitSock.h"  
  2. #include <stdio.h>  
  3.   
  4. VOID main()  
  5. {  
  6.     CInitSock initSock;  
  7.   
  8.     SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);  
  9.     //设置广播就是设置这个选项  
  10.     BOOL bBroadcast = TRUE;  
  11.     ::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL));  
  12.   
  13.     //设置广播地址  
  14.     SOCKADDR_IN bcast;  
  15.     bcast.sin_family = AF_INET;  
  16.     bcast.sin_port = htons(4567);  
  17.     bcast.sin_addr.S_un.S_addr = INADDR_BROADCAST; //::inet_addr("255.255.255.255");  
  18.     printf("begin send the data:\r\n");  
  19.     char sz[] = "this is the broadcast data";  
  20.     while(TRUE)  
  21.     {  
  22.         ::sendto(s, sz, sizeof(sz), 0, (sockaddr*)&bcast, sizeof(bcast));  
  23.         ::Sleep(5000);  
  24.     }  
  25. }  
客户端代码:

[python]  view plain copy print ?
  1. #include "InitSock.h"  
  2. #include <stdio.h>  
  3.   
  4. VOID main()  
  5. {  
  6.     CInitSock initSock;  
  7.   
  8.     SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);  
  9.   
  10.     SOCKADDR_IN sin;   
  11.     sin.sin_family = AF_INET;  
  12.     sin.sin_port = ::htons(4567);  
  13.     sin.sin_addr.S_un.S_addr = INADDR_ANY;  
  14.     if (::bind(s, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)  
  15.     {  
  16.         printf("bind error");  
  17.         return;  
  18.     }  
  19.   
  20.     printf("begin recv the broadcast data:\r\n");  
  21.     char sz[256] = {0};  
  22.     SOCKADDR_IN addrRemote;  
  23.     int nLen = sizeof(SOCKADDR_IN); //这里必须设置成这个大小   
  24.     while (TRUE)  
  25.     {  
  26.         int nRet = ::recvfrom(s, sz, sizeof(sz), 0, (sockaddr*)&addrRemote, &nLen);  
  27.         if (nRet > 0)  
  28.         {  
  29.             sz[nRet] = '\0';  
  30.             printf(sz);  
  31.         }  
  32.   
  33.     }  
  34. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Winsock 是 Windows 操作系统中的一个网络编程接口,可以用于在计算机之间进行通信。在 Winsock 中,广播是一种特殊的通信方式,它允许一台计算机将消息发送给同一局域网中的所有其他计算机。 在 Winsock 中进行广播通信需要以下几个步骤: 1. 创建一个 socket:首先,需要创建一个 socket,使用 Winsock 提供的 API 函数来完成。可以选择使用 UDP 或 TCP 协议,但在广播通信中,UDP 更常见。创建 socket 时需要指定地址族、协议类型和操作方式等参数。 2. 设置广播选项:在创建的 socket 上设置广播选项,以便允许广播发送和接收。可以使用 `setsockopt` 函数来设置 socket 的选项,使用 `SO_BROADCAST` 参数来启用广播功能。 3. 绑定地址和端口:将 socket 绑定到一个本地 IP 地址和端口上,以便可以接收和发送广播消息。在绑定时需要指定广播专用的 IP 地址和端口号。 4. 发送广播消息:使用 `sendto` 函数向指定的广播 IP 地址和端口发送消息。可以根据实际需求自定义消息内容和格式。 5. 接收广播消息:使用 `recvfrom` 函数从绑定的端口接收广播消息。在接收到消息后,可以对消息内容进行处理,并根据需要做出相应的回应。 需要注意的是,广播通信受到网络环境的限制,只能在同一局域网中的计算机之间进行。同时,接收方计算机需要启用广播功能,并正确设置 socket广播选项。广播通信可以用于在局域网中广播消息,例如查找在线设备、通知系统状态变化等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值