zframe_send发送的内容,可以使用zmq_recv接收吗

简介: 如果你在同一套接字上混合使用CZMQ的zframe_send和ZMQ的zmq_recv,可能会遇到问题,因为这两个函数可能对ZMQ的内部状态有不同的预期。

首先直接说结论:可以,但是不建议。


因为:在ZMQ中,zframe_send是CZMQ库中的一个函数,用于发送ZMQ消息帧,而zmq_recv是ZMQ的原生函数,用于接收消息。


如果你在同一套接字上混合使用CZMQ的zframe_send和ZMQ的zmq_recv,可能会遇到问题,因为这两个函数可能对ZMQ的内部状态有不同的预期。


如果你在发送端使用zframe_send,那么在接收端最好使用对应的zframe_recv。同样,如果你在发送端使用ZMQ的zmq_send,那么在接收端最好使用zmq_recv。


如果你需要在接收端使用zmq_recv,那么在发送端最好使用zmq_send,而不是zframe_send。这样可以确保发送和接收的方式是匹配的,避免可能的问题。


四个使用实例

在ZeroMQ的C库中,zframe_send和zframe_recv是CZMQ库的一部分,用于发送和接收单个ZeroMQ消息帧。而zmq_send和zmq_recv是ZeroMQ的原生函数,用于发送和接收消息。


这里是四个简单的C语言示例,你也可以使用它们互相通讯:


1.使用zframe_send发送消息:

#include <czmq.h>
int main(void) {
    zctx_t *ctx = zctx_new();
    void *push = zsocket_new(ctx, ZMQ_PUSH);
    zsocket_bind(push, "tcp://*:5555");
    zframe_t *frame = zframe_new("Hello", 5);
    zframe_send(&frame, push, 0);
    zctx_destroy(&ctx);
    return 0;
}


2.使用zframe_recv接收消息:

#include <czmq.h>
int main(void) {
    zctx_t *ctx = zctx_new();
    void *pull = zsocket_new(ctx, ZMQ_PULL);
    zsocket_connect(pull, "tcp://localhost:5555");
    zframe_t *frame = zframe_recv(pull);
    if (frame) {
        char *string = zframe_strdup(frame);
        printf("%s\n", string);
        free(string);
        zframe_destroy(&frame);
    }
    zctx_destroy(&ctx);
    return 0;
}


3.使用zmq_send发送消息:

#include <zmq.h>
int main(void) {
    void *ctx = zmq_ctx_new();
    void *push = zmq_socket(ctx, ZMQ_PUSH);
    zmq_bind(push, "tcp://*:5555");
    zmq_send(push, "Hello", 5, 0);
    zmq_close(push);
    zmq_ctx_destroy(ctx);
    return 0;
}


4.使用zmq_recv接收消息:

#include <zmq.h>
int main(void) {
    void *ctx = zmq_ctx_new();
    void *pull = zmq_socket(ctx, ZMQ_PULL);
    zmq_connect(pull, "tcp://localhost:5555");
    char buffer[6] = {0};
    zmq_recv(pull, buffer, 5, 0);
    printf("%s\n", buffer);
    zmq_close(pull);
    zmq_ctx_destroy(ctx);
    return 0;
}


请注意,这些示例假设你已经安装了ZeroMQ和CZMQ库,并且你的系统支持这些库。


分享一个有趣的 学习链接:https://xxetb.xet.tech/s/HY8za

目录
相关文章
|
9月前
|
消息中间件 C语言
一个使用zmq_recv 接收 5555端口的demo
这个程序会一直运行,接收来自5555端口的消息,并打印出来。每接收到一个消息,它会等待1秒,然后发送一个"World"的回复。
63 0
|
9月前
|
消息中间件
分享zframe_send使用过程中 的一个小问题
在zframe_send函数中,第一个参数是一个指向zframe_t指针的指针。这是因为在发送帧之后,该函数会销毁帧并将你的指针设置为NULL。这样做是为了防止你再次使用已经被销毁的帧。
51 0
|
Linux
设置socket接收和发送超时的一种方式
设置socket接收和发送超时的一种方式
659 0
|
消息中间件 域名解析 负载均衡
ZMQ中请求-应答模式的可靠性设计
ZMQ中请求-应答模式的可靠性设计
ZMQ中请求-应答模式的可靠性设计
|
数据库
为socket的recv/send设置超时
为socket的recv/send设置超时
247 0
|
存储 JSON 缓存
GET/POST接收或发送数据的问题
GET/POST接收或发送数据的问题