下面是一个使用 ACE (ADAPTIVE Communication Environment) 库进行 TCP 通信的 C++ 示例,该示例从 MongoDB 查询经纬度并将结果通过 TCP 发送给客户端。
前提条件
- 安装 ACE 库。
- 安装 MongoDB C++ 驱动,并设置好环境变量。
- 确保您的编译器支持 C++11 或更高版本。
示例代码
#include <iostream>
#include <string>
#include <vector>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/uri.hpp>
#include <bsoncxx/json.hpp>
#include <ace/ACE.h>
#include <ace/SOCK_Connector.h>
#include <ace/SOCK_Stream.h>
// 定义 Location 结构体来保存查询到的位置数据
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);
}
// 创建 TCP Socket
ACE_SOCK_Connector connector;
ACE_INET_Addr remote_addr(8080, "127.0.0.1"); // IP和端口
ACE_SOCK_Stream sock_stream;
// 尝试连接到服务器
if (connector.connect(sock_stream, remote_addr) == -1) {
std::cerr << "Connection failed: " << ACE_OS::last_error() << std::endl;
return -1;
}
// 打包数据为 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 = sock_stream.send(jsonData.c_str(), jsonData.length());
if (sentBytes == -1) {
std::cerr << "Send failed: " << ACE_OS::last_error() << std::endl;
} else {
std::cout << "Data sent: " << jsonData << std::endl;
}
sock_stream.close(); // 关闭流
return 0;
}
编译与运行
要编译此程序,您需要确保链接了 ACE 和 MongoDB C++ 驱动的相关库。具体步骤取决于您的开发环境。
使用 g++ 编译
如果您在使用 Linux 环境,可以通过以下命令编译:
g++ -o tcp_sender tcp_sender.cpp -lACE -lmongocxx -lbsoncxx -pthread
使用 Visual Studio 编译
如果您在 Windows 上使用 Visual Studio,请遵循以下步骤:
- 创建一个新的 C++ 项目。
- 将上述代码粘贴到项目中。
- 在项目属性中添加 ACE 和 MongoDB 的库路径到链接器输入部分。
- 链接相应的库文件(如
ACE.lib
,libmongocxx.lib
,libbsoncxx.lib
)。 - 编译并运行程序。
注意事项:
- 请替换
your_database_name
和your_collection_name
为实际的数据库和集合名称。 - 确保 MongoDB 服务正在运行,并且可以正常访问。
- 根据需要修改 IP 地址和端口号,以便将数据发送到适当的客户端地址。
内容由零声教学AI助手提供,问题来源于学员提问