windows c++ udp广播 并接收数据
时间: 2023-12-29 22:02:16 浏览: 63
UDP 广播是一种在网络中向多个主机发送数据的方法,可以使用 C++ 在 Windows 上实现。下面是一个简单的示例代码,可以发送和接收 UDP 广播消息:
发送广播消息:
```c++
#include <iostream>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
// 初始化 WinSock
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
// 创建套接字
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// 设置广播选项
int broadcast = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&broadcast, sizeof(broadcast));
// 构建广播地址
sockaddr_in broadcastAddr;
memset(&broadcastAddr, 0, sizeof(broadcastAddr));
broadcastAddr.sin_family = AF_INET;
broadcastAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
broadcastAddr.sin_port = htons(12345);
// 发送广播消息
const char* msg = "Hello, world!";
sendto(sock, msg, strlen(msg), 0, (sockaddr*)&broadcastAddr, sizeof(broadcastAddr));
// 关闭套接字
closesocket(sock);
// 释放 WinSock
WSACleanup();
return 0;
}
```
接收广播消息:
```c++
#include <iostream>
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
// 初始化 WinSock
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
// 创建套接字
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// 绑定端口
sockaddr_in localAddr;
memset(&localAddr, 0, sizeof(localAddr));
localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(12345);
bind(sock, (sockaddr*)&localAddr, sizeof(localAddr));
// 接收广播消息
char buf[1024];
sockaddr_in fromAddr;
int fromLen = sizeof(fromAddr);
int n = recvfrom(sock, buf, sizeof(buf), 0, (sockaddr*)&fromAddr, &fromLen);
buf[n] = '\0';
// 输出接收到的消息
std::cout << "Received from " << inet_ntoa(fromAddr.sin_addr) << ": " << buf << std::endl;
// 关闭套接字
closesocket(sock);
// 释放 WinSock
WSACleanup();
return 0;
}
```
在上面的示例代码中,发送方使用 `sendto` 函数发送广播消息,接收方使用 `recvfrom` 函数接收广播消息。需要注意的是,在发送方需要设置广播选项,而在接收方需要绑定本地端口。