gpt4 book ai didi

c++ - 通过 std::asio tcp 套接字发送结构

转载 作者:行者123 更新时间:2023-11-28 05:45:24 25 4
gpt4 key购买 nike

我想发送消息结构抛出 TCP/IP 套接字。我决定使用 std::asio(或 boost::asio)库。我的决定是基于这样一个事实,即 boost asio 是一个多平台,我的一个客户需要在 Windows 机器上运行。

请查看消息结构。

#pragma once

#define SENSOR_LENGTH 5
#define OPERATOR_NAME_LENGTH 100


// extend it on demand
typedef enum msg_type_t {
NO_MSG,
INIT_MAMBA_REQ,
INIT_MAMBA_RESP,
INIT_TELESCOPE_REQ,
INIT_TELESCOPE_RESP,
START_EVENT_MAMBA_REQ,
START_EVENT_MAMBA_RESP,
START_EVENT_TIMEPIX_REQ,
START_EVENT_TIMEPIX_RESP,
STOP_EVENT_MAMBA_REQ,
STOP_EVENT_MAMBA_RESP,
STOP_EVENT_TIMEPIX_REQ,
STOP_EVENT_TIMEPIX_RESP
} MSG_TYPE;

typedef struct msg_hdr_t {
MSG_TYPE MsgType;
long seqNum;
} __attribute__((packed))MSG_HDR;


typedef enum _runType
{
CUSTOM=0,
BIAS,
ANGLE
} __attribute__((packed)) RunType;

typedef struct init_event_t{
RunType runType;
int dutRunNumber;
int biasVoltage;
int angle;
int stageX;
int stageY;
double temperature;
unsigned short sector;
char sensorName[SENSOR_LENGTH];
char operatorName[SENSOR_LENGTH];
}__attribute__((packed))InitEventReqStruct;


typedef struct init_event_rsp{
int keplerRunNumber;
}__attribute__((packed))InitEventRespStruct;

typedef struct stop_event_req{
bool isGood;
}__attribute__((packed))StopEventReqStruct;


typedef union msg_data_t {
bool empty;
InitEventReqStruct initEventReq;
InitEventRespStruct initEventResp;
StopEventReqStruct stopEventReq;
} __attribute__((packed))MSG_DATA;

最佳答案

首先,问自己一个问题,C++boost::asio 的复杂性是否为客户所接受。事实上,您可以使用 C++(我喜欢而且我喜欢)并不意味着从业务角度来看这是明智的选择。知道这些复杂技术的人很难雇用。 Python、C#、Java 或 Ruby 更易于访问。

抛开语言方面的考虑,您需要先序列化您的结构,然后再通过网络发送它,并在接收时反序列化它。

有很多方法可以做到这一点。您可以将这些结构转换为 XML 或 JSON,就像互联网上的人们所做的那样。您可以编写自己的二进制序列化器-反序列化器,以可维护性差换取超强性能。或者您可以使用一些生成器来创建 ser-des 样板文件。

检查 Protocol Buffer : https://developers.google.com/protocol-buffers/

看看 Boost.Serialization: http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html

在进入更复杂的解决方案之前,我可能会先了解一下 XML/JSON。 JSON 和 XML 被用于在所有可以想象的技术之间通过互联网上的线路发送结构化数据。例如,Java 可以为您提供出色的库,无需一行代码即可将 JSON 反序列化为 Java 类。

重新考虑您的选择。不要重新发明轮子。

关于c++ - 通过 std::asio tcp 套接字发送结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36326392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com