C++实现局域网广播
问题:
广播发送端socket 绑定网址255.255.255.255,接收端收不到广播。发送端绑定接收端端的网址时,比如192.168.1.1,可以收到广播。请问为什么呢
#include <iostream>
#include <winsock2.h> //注意这里的include文件顺序
#include <Ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{
WSAData wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
cout << "Error in WSAStartup" << endl;
return 0;
}
SOCKET server;
server = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); //创建一个UDP套接口
cout << "create socket: " << server << endl;
BOOL bBroadcast = TRUE;
if (setsockopt(server, SOL_SOCKET, SO_BROADCAST, (char *)&bBroadcast, sizeof(bBroadcast)) == SOCKET_ERROR)
{
WSACleanup();
cout << "Error in setsockopt(SO_REUSEADDR): " << WSAGetLastError() << endl;
return 0;
}
SOCKADDR_IN bcast;
bcast.sin_family = AF_INET;
// bcast.sin_addr.S_un.S_addr = INADDR_BROADCAST;
// bcast.sin_addr.S_un.S_addr = inet_addr("192.168.120.255");
inet_pton(AF_INET, "192.168.120.60", &bcast.sin_addr.s_addr);
bcast.sin_port = htons(4567);
//发送广播
cout << "开始广播!" << endl;
char sz[] = "This is just a test!\r\n";
int i = 0;
while (TRUE){
i++;
cout << "第" << i << "次广播!" << endl;
if (sendto(server, sz, strlen(sz), 0, (sockaddr*)(&bcast), sizeof(bcast)) == -1){
cout << "发送用户输入的数据到多播组失败!" << endl;
}
Sleep(1000);
}
return 0;
}