linux c++ udp
时间: 2023-04-16 17:04:46 浏览: 120
Linux C++ UDP是指在Linux操作系统下使用C++编程语言实现UDP协议的通信。UDP是一种无连接的协议,它不保证数据传输的可靠性,但具有传输速度快、实时性强等特点。在Linux下,使用C++编写UDP程序可以实现高效的网络通信,常用于实时数据传输、视频流传输等场景。
相关问题
Linux C++UDP列子
以下是一个简单的 Linux C++ UDP 编程示例:
```cpp
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8080
int main()
{
int sockfd;
char buffer[1024] = {0};
const char *hello = "Hello from client";
struct sockaddr_in servaddr;
// 创建 socket 文件描述符
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
std::cerr << "Socket creation error" << std::endl;
return -1;
}
memset(&servaddr, 0, sizeof(servaddr));
// 配置服务器地址
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = INADDR_ANY;
int n, len;
// 发送数据到服务器
sendto(sockfd, hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *)&servaddr, sizeof(servaddr));
std::cout << "Hello message sent." << std::endl;
// 接收来自服务器的回复
n = recvfrom(sockfd, (char *)buffer, 1024, MSG_WAITALL, (struct sockaddr *)&servaddr, (socklen_t *)&len);
buffer[n] = '\0';
std::cout << "Server : " << buffer << std::endl;
close(sockfd);
return 0;
}
```
此示例创建了一个 UDP socket,向服务器发送 "Hello from client" 消息,并等待服务器回复。在接收到回复后,将回复打印到控制台上。
linux c++ udp广播服务端
以下是一个简单的 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` 函数。
阅读全文