udp发送结构体数据
时间: 2023-07-21 08:07:18 浏览: 168
Socket UDP 发送结构体数据
4星 · 用户满意度95%
在UDP协议中,可以使用结构体直接发送数据,但需要注意以下几点:
1. 结构体必须是POD类型(Plain Old Data),即只包含内置数据类型或其他POD类型的结构体。如果包含了指针或虚函数等内容,则不能直接发送。
2. 发送时需要将结构体指针强制转换为char *类型,以便进行传输。
下面是一个简单的示例代码,发送包含两个整数的结构体数据:
```c++
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
using namespace std;
struct Data {
int x;
int y;
};
int main() {
int sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1) {
cerr << "Failed to create socket." << endl;
return 1;
}
sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
Data data = {10, 20};
char *buf = reinterpret_cast<char *>(&data);
int len = sizeof(data);
int sent = sendto(sock, buf, len, 0, reinterpret_cast<sockaddr *>(&addr), sizeof(addr));
if (sent != len) {
cerr << "Failed to send data." << endl;
return 1;
}
close(sock);
return 0;
}
```
在上述代码中,定义了一个包含两个整数的结构体Data,然后将其强制转换为char *类型并发送出去。在发送数据时,需要指定目标地址和端口号。
阅读全文