// broadcast 广播
// sender
// MulitiBoradCast.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <WinSock2.h>
#include <stdlib.h>
#pragma comment(lib, "WS2_32.lib")
class CInitSock
{
public:
CInitSock(BYTE minorVer = 2, BYTE majorVer =2);
~CInitSock();
};
CInitSock::CInitSock(BYTE minorVer /* = 2 */, BYTE majorVer /* =2 */)
{
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if (::WSAStartup(sockVersion, &wsaData) !=0)
{
exit(0);
}
}
CInitSock::~CInitSock()
{
::WSACleanup();
}
CInitSock initsock;
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET s = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
// 有效 SO_BROADCAST选项
bool bBroadcast = TRUE;
::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&bBroadcast, sizeof(bool));
// 设置广播地址、这里的广播端口号(电台)是4567
SOCKADDR_IN bcast;
bcast.sin_family = AF_INET;
bcast.sin_addr.s_addr = INADDR_BROADCAST; // ::inet_addr("255.255.255.255")
bcast.sin_port = htons(4567);
// 发送广播
printf("开始向4567端口发送广播数据 .... \n \n");
char sz[] = "This is just a test. \r \n";
while(TRUE)
{
::sendto(s, sz, strlen(sz), 0, (SOCKADDR *)&bcast, sizeof(bcast));
::Sleep(5000);
}
return 0;
}
// author
// recver
// broadcastRecver.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <WinSock2.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#pragma comment(lib, "WS2_32.lib")
class CInitSock
{
public:
CInitSock(BYTE minorVer = 2, BYTE majorVer = 2);
~CInitSock();
protected:
private:
};
CInitSock::CInitSock(BYTE minorVer /* = 2 */, BYTE majorVer /* = 2 */)
{
WSADATA wsaData;
WORD socketVersion = MAKEWORD(minorVer, majorVer);
if (::WSAStartup(socketVersion, &wsaData) !=0)
{
exit(0);
}
}
CInitSock::~CInitSock()
{
::WSACleanup();
}
CInitSock theSock;
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);
// 首先要绑定一个本地地址,指明广播端口号
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_addr.S_un.S_addr = INADDR_ANY;
sin.sin_port = ::ntohs(4567);
if (::bind(s, (SOCKADDR*)&sin, sizeof(sin)) == SOCKET_ERROR)
{
printf( "bind() failed \n");
return 0;
}
// 接收广播
printf(" 开始接收4567端口数据......\n\n");
SOCKADDR_IN addRemote;
int nLen = sizeof addRemote;
char sz[256] = { '0'};
while(TRUE)
{
int nRet = ::recvfrom(s, sz, 256, 0,(SOCKADDR*)&addRemote, &nLen);
if (nRet> 0)
{
sz[nRet] = '\0';
printf(sz);
}
}
return 0;
}