gpt4 book ai didi

amqp 上的 C 二进制消息

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:32 25 4
gpt4 key购买 nike

目前我有一个守护进程使用 recvfrom 系统调用监听端口 X 上的 TCP/UDP 数据包:

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);

然后数据通过msgsnd系统调用通过消息队列发送:

int msgsnd(int msqid, struct msgbuf *msgp, int msgsz, int msgflg);

我想用 RabbitMQ 替换 msgsnd 系统调用,并使用 amqp 协议(protocol)发送消息。我面临的问题是通过 RabbitMQ 接收和发送的数据格式。当我在端口上收到数据时,我会尝试像这样发送它:

ssize_t recvfrom(
sockfd, msgbufInst.msgContent, len, flags, src_addr, addrlen
);
send_over_rabbitmq(msgbufInst.msgContent);

send_over_rabbitmq 几乎在哪里

send_over_rabbitmq(char *rawData){
amqp_bytes_t payload;
payload.len = sizeof(rawData);
payload.bytes = rawData;

int result = amqp_basic_publish((*channel)->conn, 1,
amqp_cstring_bytes("myExchange"),
amqp_cstring_bytes(""), 0, 0, NULL, payload);
}

有效载荷发送和接收成功,但一些数据丢失。当我使用队列中的消息时,有效负载与我使用系统调用发送/使用消息时的负载不同。我确信它与我正在使用的数据类型有关,但我还不能弄清楚。

最佳答案

正如我在 comment 中指出的那样:

send_over_rabbitmq() 函数中,sizeof(rawData) 的值可能是 8,也可能只有 4 — 它是指针变量的大小,而不是它指向的数据的长度。这可能不是您想要的。

您需要向 send_over_rabbitmq() 函数发送更多信息——最值得注意的是,从 recvfrom() 接收的数据的长度。这意味着捕获信息——无论如何,在尝试通过 RabbitMQ 中继信息之前,您应该检查 recvfrom() 的返回值。

关于amqp 上的 C 二进制消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56912415/

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