C++广播通信实例

时间:2021-05-20

本文实例讲述了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++程序设计有所帮助。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章