以下是一个使用 C++ 的示例,展示如何从 MongoDB 查询经纬度数据,并通过 UDP 将其发送给客户端。我们将使用 MongoDB C++ 驱动和 POSIX sockets 进行 UDP 通信。
前提条件
- 确保已安装 MongoDB C++ 驱动(可以参考 MongoDB 官方文档)。
- 使用标准的
<sys/socket.h>
和<netinet/in.h>
库进行 UDP 通信。
示例代码
#include <iostream>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/uri.hpp>
#include <bsoncxx/json.hpp>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
struct Location {
std::string name;
double latitude;
double longitude;
};
int main() {
// 初始化 MongoDB 驱动
mongocxx::instance instance{};
mongocxx::client client{mongocxx::uri{}};
auto collection = client["your_database_name"]["your_collection_name"];
std::vector<Location> locations;
// 查询数据
auto cursor = collection.find({});
for (auto&& doc : cursor) {
Location loc;
loc.name = bsoncxx::string::to_string(doc["name"].get_utf8().value);
loc.latitude = doc["latitude"].get_double();
loc.longitude = doc["longitude"].get_double();
locations.push_back(loc);
}
// 创建 UDP socket
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET; // IPv4
servaddr.sin_port = htons(8080); // 客户端端口
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 客户端 IP
// 打包数据为 JSON 格式字符串
std::string jsonData = "[";
for (size_t i = 0; i < locations.size(); ++i) {
jsonData += "{\"name\":\"" + locations[i].name + "\",\"latitude\":" +
std::to_string(locations[i].latitude) + ",\"longitude\":" +
std::to_string(locations[i].longitude) + "}";
if (i != locations.size() - 1) jsonData += ",";
}
jsonData += "]";
// 发送数据到客户端
ssize_t sentBytes = sendto(sockfd, jsonData.c_str(), jsonData.length(), MSG_CONFIRM,
(const struct sockaddr *) &servaddr,
sizeof(servaddr));
if (sentBytes == -1) {
perror("sendto failed");
} else {
std::cout << "Data sent: " << jsonData << std::endl;
}
close(sockfd);
return 0;
}
编译与运行
确保链接了必要的库。在 Ubuntu 上,可以使用以下命令:
g++ -o udp_mongodb_sender udp_mongodb_sender.cpp `pkg-config --cflags --libs libmongocxx` -lstdc++
然后运行程序:
./udp_mongodb_sender
注意事项:
- 请确保 MongoDB 服务正在运行,并且数据库和集合名称正确。
- 根据需要修改 IP 地址和端口号,以便将数据发送到适当的客户端地址。
- 如果没有安装相关的库,请按照官方文档进行安装配置。
内容由零声教学AI助手提供,问题来源于学员提问