linux c++ udp广播服务端
时间: 2023-10-19 11:05:47 浏览: 138
以下是一个简单的 Linux C++ UDP 广播服务端示例:
```cpp
#include <iostream>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
int main() {
const int PORT = 8888; // 广播端口
const char* BROADCAST_IP = "255.255.255.255"; // 广播IP地址
// 创建socket
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket error");
exit(1);
}
// 设置广播选项
int on = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) < 0) {
perror("setsockopt error");
exit(1);
}
// 设置服务器地址
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr)); // 清空结构体
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr(BROADCAST_IP);
// 发送数据
const char* msg = "Hello, world!";
if (sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("sendto error");
exit(1);
}
// 关闭socket
close(sockfd);
return 0;
}
```
说明:
1. 创建 socket 时使用 `AF_INET` 表示使用 IPv4 地址族,使用 `SOCK_DGRAM` 表示使用 UDP 协议。
2. 使用 `setsockopt` 函数设置 `SO_BROADCAST` 选项为 1,表示允许发送广播数据。
3. 设置服务器地址时,将 IP 地址设置为广播地址 `"255.255.255.255"`,表示将数据发送给局域网内的所有设备。
4. 发送数据时使用 `sendto` 函数,其中第一个参数是 socket 文件描述符,第二个参数是要发送的数据,第三个参数是数据长度,第四个参数是服务器地址信息,第五个参数是服务器地址信息的长度。
5. 关闭 socket 时使用 `close` 函数。
阅读全文