C++廣播通信實例
更新時間:2014年10月21日 10:43:29 投稿:shichen2014
這篇文章主要介紹了C++實現廣播通信的方法,實例講述了C++ socket廣播通信的原理與實現方法,需要的朋友可以參考下
本文實例講述了C++實現廣播通信的方法。分享給大家供大家參考。具體實現方法如下:
廣播通信代碼框架:
1. 協議都是:
復制代碼 代碼如下:
SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);
2. 服務端設置選項
復制代碼 代碼如下:
BOOL bBroadcast = TRUE;
::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL));
::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL));
3. 服務端向255.255.255.255 這個廣播地址發(fā)內容 客戶端收聽就可以了
服務端代碼:
復制代碼 代碼如下:
#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 <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);
}
}
}
#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++程序設計有所幫助。
相關文章
C++11并發(fā)編程關于原子操作atomic的代碼示例
今天小編就為大家分享一篇關于C++11并發(fā)編程關于原子操作atomic的代碼示例,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12