localhost, 127.0.0.1, ip 区别

需求 和本级进程通信的时候,使用 localhost, 127.0.0.1, 本级 ip 之间的区别? 解决 localhost 连 IP 都没有,不会有IP报头,只会有 TCP 报头。从上向下,经过 应用层,传输层。 127.0.0.1 有 IP,会有 IP 报头。 从上向下,经过 应用层,传输层,网络层。 参考 【IP/TCP】127.0.0.1和localhost和本机IP三者的区别

2023-06-27 · 1 min · 24 words · RamLife

c++ json 库 nlohmann json 转换异常 [json.exception.type_error.305]

需求 nlohmman 进行 json 转换时,报异常: [json.exception.type_error.305] cannot use operator[] with a string argument with array. 解决 转换为 json 异常 原因可能是,嵌套时,括号不匹配 void to_json(json& j, const VoltageConfigJson& config) { j = json{{"config_name", config.name}}; for (auto & cfg : config.data) { json channel; to_json(channel, cfg); j["config_data"].push_back(channel); } } 上面这个代码中,如果第一句写成下面这样,那么就会是 305 的异常。 j = json{"config_name", config.name}; 参考 {json.exception.type_error.305} cannot use operator{} with a string argument with array Cannot use operator{} with a string argument with string...

2023-06-26 · 1 min · 92 words · RamLife

c++ json 库 nlohmann 中类和 json 转换

需求 尝试使用 nlohmman 把复杂的类转为 json。 解决 复杂的类需要对其中的某些部分单独抽出来进行转换。 用于转换为 json 的类 struct VoltageSetConfigData { float w1; float p1; float w2; float p2; float ref; float pf; }; using VoltageGetConfigData = VoltageSetConfigData; class VoltageConfigJson { public: std::string name; std::vector<VoltageGetConfigData> data; }; 数组单个元素转换 void to_json(json& j, const VoltageGetConfigData& data) { j = json{{"w1", data.w1}, {"p1", data.p1}, {"w2", data.w2}, {"p2", data.p2}, {"ref", data.ref}, {"pf", data.pf}}; } void from_json(const json& j, VoltageGetConfigData& data) { j.at("w1").get_to(data.w1); j....

2023-06-26 · 1 min · 135 words · RamLife

c++ json 库 nlohmann 文件读写

需求 nlohmman 读写 json 配置文件. 解决 写文件 QString fileName = QFileDialog::getSaveFileName(this, tr("save config file"), "./voltage_", tr("Json (*.json)")); qDebug() << fileName << Qt::endl; if (fileName.isEmpty()) return; ofstream file(fileName.toStdString(), ios::out); json j; to_json(j, config_json); file << j << std::endl; 读文件 QString file_name = QFileDialog::getOpenFileName(this, tr("load config file"), "./voltage_", tr("Json (*.json)")); qDebug() << file_name << Qt::endl; if (file_name.isEmpty()) return; ifstream file(file_name.toStdString(), ios::in); json j = json::parse(file); 参考 nlohmann/json 的主要用法 【C++ JSON 开源库】nlohmann入门使用总结 nlohmann/json...

2023-06-26 · 1 min · 72 words · RamLife

来此加密 vip,自动验证

需求 来此加密网站,使用积分兑换为 vip 之后,如果是普通 vip,那么是没有独立通道,只支持自动验证,如果是高级 vip,那么是有独立通道,支持自动重申和自动验证的。 https://letsencrypt.osfipin.com 解决 修改验证方式,从手动验证改为自动验证。 获取自动验证的内容,注意手动验证给出的是 txt,自动验证给出的是 cname. 在 namesilo 中删除原来的 txt 条目,新增 cname 条目。 等待一段时间,在本地运行 nslookup -q=cname _acme-challenge.xxx .确认结果 在网站上提交验证。 手动验证时,就算同样的域名,不同的证书, txt 也是不一样的。自动验证时,同样的域名,不同的证书,cname 是一样的。 参考 自动验证步骤

2023-06-26 · 1 min · 31 words · RamLife

QT 线程池 介绍

需求 最近想了解下 线程池。 解决 QT 多线程之线程池QThreadPool(深入理解) 参考

2023-06-26 · 1 min · 7 words · RamLife

QT tcp server 多线程

需求 qt 在 tcp 编程时,希望 server 多线程来处理多个客户端的连接。 解决 多线程来处理连接的时候,还是 override incomingConnection 比较方便。主要是两个方面的工作: 创建新的 TcpSocket 方便处理数据 每个线程用来维护多个客户端 参考 QT的TCP连接多线程实现 QT编写TCP/UDP调试助手之多线程TCP服务器 Qt多线程 TCP 服务端 QT学习:QTcpServer多线程实现 QTcpServer多线程实现 iap_download

2023-06-26 · 1 min · 25 words · RamLife

QT tcp server 多连接

需求 qt 在 tcp 编程时,希望 server 是多连接的,可以同时连接多个 client 解决 服务器接到新客户端连接后,会分配一个 SocketDescriptor, 然后 emit newConnection(), 服务器收到新信息,会 emit readRead(). 但是上面这两个信号都不会传递 SocketDescriptor, 所以无法分辨客户端。 override incomingConnection 重写 incomingConnection 可以获取 socketDescriptor, 然后继承 QTcpSocket 新建一个 tcp 的类,来获取 socketDescriptor. 虽然比较麻烦,但是后面多线程处理会比较方便。 nextPendingConnection nextPendingConnection 可以获取新连接的客户端,但是也是得不到 SocketDescriptor, 不过可以通过 QTcpSocket 的 peerAddress() 和 peerPort() 来获取客户端的 ip 和 端口,可以作为分辨客户端的依据。 readyRead 也可以使用 QTcpSocket::readyRead 这个信号来绑定 lambda 接收并回复的表达式。 参考 QT TCP网络编程 QT 之TCP网络编程(非常值得看的一篇博客!) QT TCP服务端如何判断客户端已断开连接 qt之QAbstractSocket incomingConnection qtcpsocket 【QT实现TCP数据发送和接收】

2023-06-25 · 1 min · 64 words · RamLife

QT QDataStream function commitTransaction return false

需求 最近在做一个 tcp demo 的时候,发现直接 read 没有问题,但是当使用 QDataStream 的 commitTransaction 来读取,返回的就是 false 这个就比较奇怪。 解决 通过 wireshark 抓包,发现 server 数据是已经发出来了,只是 client 解析错误。重新检查发送部分的代码,经过调整后,发现,向 QDataStream 里面写数据的时候,只能写 QString, 如果直接写字符串,就会读取错误。直接对比两种情况的打印,也发现,确实两种情况下,保存到 QByteArray 中的数据是不一样的。 参考 Question about QDataStream and its functions startTransaction and commitTransaction QIODevice 类 - 什么是设备? 什么是序列化? Serializing Qt Data Types QDataStream 类 - 序列化工具

2023-06-24 · 1 min · 50 words · RamLife

QT slot 所属线程

需求 qt 中 slot 可以有两种形式,一种是单独的一个函数,还有一种是 lambda 表达式,那么他们所属的线程是什么呢? 解决 单独的槽函数,所属线程是主线程 lambda 表达式,所属线程是发送信号对应的子线程。 参考 换了多种方法,还是没完美解决、、、

2023-06-24 · 1 min · 13 words · RamLife