Here is my example: I did it with CURVE but it's the same without CURVE
I publish a String with 1024 'x' ending with "\nENDE" to determine that the end
is sent as well
publisher:
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <czmq.h>
#include <assert.h>
// Convert C string to 0MQ string and send to socket
static int s_send(void *socket, char *string) {
int size = zmq_send(socket, string, strlen(string), 0);
return size;
}
// Sends string as 0MQ string, as multipart non-terminal
static int s_sendmore(void *socket, char *string) {
int size = zmq_send(socket, string, strlen(string), ZMQ_SNDMORE);
return size;
}
int main() {
char str[1024];
int i;
strcpy(str, "x");
for (i = 0; i < sizeof(str); i++) {
strcat(str, "x");
}
strcat(str, "\nENDE");
puts(str);
puts("Init Publisher");
const char *addr = "tcp://127.0.0.1:8888";
zctx_t *context = zctx_new();
void *pub = zsocket_new(context, ZMQ_PUB);
zcert_t *server_cert = zcert_load("server_cert.txt_secret");
assert(server_cert);
int rc = zsocket_bind(pub, addr);
assert(rc != -1);
sleep(5);
puts("publish");
for (i = 0; i < 10; i++) {
sleep(1);
s_sendmore(pub, "A");
s_send(pub, str);
}
return 0;
}
subscriber
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <czmq.h>
#include <assert.h>
static char *
s_recv(void *socket) {
char buffer[256];
int size = zmq_recv(socket, buffer, 255, 0);
if (size == -1)
return NULL;
if (size > 255)
size = 255;
buffer[size] = 0;
return strdup(buffer);
}
int main(void) {
puts("Init Subscriber");
fflush(stdout);
zctx_t* context = zctx_new();
void* subscriber = zsocket_new(context, ZMQ_SUB);
zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "A", strlen("A"));
zsocket_connect(subscriber, "tcp://127.0.0.1:8888");
//zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "B", 1);
while (1) {
char *topic = s_recv(subscriber);
char *value = s_recv(subscriber);
printf("%s:%s\n", topic, value);
free(topic);
free(value);
}
// We never get here, but clean up anyhow
zmq_close(subscriber);
zmq_ctx_destroy(context);
}
-----Ursprüngliche Nachricht-----
Von: [email protected]
[mailto:[email protected]] Im Auftrag von Pieter Hintjens
Gesendet: Dienstag, 17. März 2015 15:23
An: ZeroMQ development list
Betreff: Re: [zeromq-dev] Limit of characters for zmq_send ?
There's no limit. Can you provide a minimal example that shows the problem?
On Tue, Mar 17, 2015 at 12:53 PM, Bachmair Florian - flexSolution GmbH
<[email protected]> wrote:
> Hi!
>
>
>
> I have tried to send/publish string with 1000 characters. But the subscriber
> only gets about 200-300 of these characters, the rest is cut off.
>
>
>
> Is there a Limit?
>
>
> _______________________________________________
> zeromq-dev mailing list
> [email protected]
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <czmq.h>
#include <assert.h>
// Convert C string to 0MQ string and send to socket
static int s_send(void *socket, char *string) {
int size = zmq_send(socket, string, strlen(string), 0);
return size;
}
// Sends string as 0MQ string, as multipart non-terminal
static int s_sendmore(void *socket, char *string) {
int size = zmq_send(socket, string, strlen(string), ZMQ_SNDMORE);
return size;
}
int main() {
char str[1024];
int i;
strcpy(str, "x");
for (i = 0; i < sizeof(str); i++) {
strcat(str, "x");
}
strcat(str, "\nENDE");
puts(str);
puts("Init Publisher");
const char *addr = "tcp://127.0.0.1:8888";
zctx_t *context = zctx_new();
//zauth_t *auth = zauth_new(context);
//zauth_allow(auth, "127.0.0.1");
//assert(auth);
//zauth_set_verbose(auth, true);
//zauth_configure_curve(auth, "*", ".curve");
void *pub = zsocket_new(context, ZMQ_PUB);
zcert_t *server_cert = zcert_load("server_cert.txt_secret");
assert(server_cert);
//zcert_apply(server_cert, pub);
//zsocket_set_curve_server(pub, 1);
int rc = zsocket_bind(pub, addr);
assert(rc != -1);
sleep(5);
puts("publish");
for (i = 0; i < 10; i++) {
sleep(1);
s_sendmore(pub, "A");
s_send(pub, str);
}
return 0;
}
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <czmq.h>
#include <assert.h>
static char *
s_recv(void *socket) {
char buffer[256];
int size = zmq_recv(socket, buffer, 255, 0);
if (size == -1)
return NULL;
if (size > 255)
size = 255;
buffer[size] = 0;
return strdup(buffer);
}
int main(void) {
puts("Init Subscriber");
fflush(stdout);
zctx_t* context = zctx_new();
void* subscriber = zsocket_new(context, ZMQ_SUB);
//zcert_t *client_cert = zcert_load("client_cert.txt");
//assert(client_cert);
//zcert_t *server_cert = zcert_load("server_cert.txt");
//assert(server_cert);
// zcert_apply(client_cert, subscriber);
//zsocket_set_curve_serverkey(subscriber,
zcert_public_txt(server_cert));
zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "A", strlen("A"));
zsocket_connect(subscriber, "tcp://127.0.0.1:8888");
//zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, "B", 1);
while (1) {
char *topic = s_recv(subscriber);
char *value = s_recv(subscriber);
//printf("SUB:%s:%s\n", topic, value);
//fflush(stdout);
printf("%s:%s\n", topic, value);
free(topic);
free(value);
}
// We never get here, but clean up anyhow
zmq_close(subscriber);
zmq_ctx_destroy(context);
}
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev