#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <nanomsg/nn.h> #include <nanomsg/reqrep.h> #define SERVER_ADDRESS "tcp://127.0.0.1:5555" // 服务器地址 int main() { int sock = nn_socket(AF_SP, NN_REQ); // 创建一个REQ类型的socket if (sock < 0) { fprintf(stderr, "nn_socket error: %s\n", nn_strerror(nn_errno())); return -1; } if (nn_connect(sock, SERVER_ADDRESS) < 0) { // 连接服务器地址 fprintf(stderr, "nn_connect error: %s\n", nn_strerror(nn_errno())); nn_close(sock); return -1; } char *request = "123"; int request_len = strlen(request) + 1; int bytes = nn_send(sock, request, request_len, 0); // 发送请求消息 if (bytes < 0) { fprintf(stderr, "nn_send error: %s\n", nn_strerror(nn_errno())); nn_close(sock); return -1; } printf("client sent: %s\n", request); char *buf = NULL; bytes = nn_recv(sock, &buf, NN_MSG, 0); // 接收回复消息 if (bytes < 0) { fprintf(stderr, "nn_recv error: %s\n", nn_strerror(nn_errno())); nn_close(sock); return -1; } printf("client received: %s\n", buf); nn_freemsg(buf); // 释放接收到的消息内存 nn_close(sock); // 关闭socket return 0; } 以上是一个客户端代码,客户端发送内容“123”服务器回复“abc”,我想要更改一下,客户端发送一段json,使用libjansson,json内容为{"module":"1","from":"2","time":"","service":"get_dp_version","args":[]},json单独放在一个函数里。不要都堆在主函数里
时间: 2024-03-02 10:53:54 浏览: 19
好的,您可以尝试以下代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <nanomsg/nn.h>
#include <nanomsg/reqrep.h>
#include <jansson.h>
#define SERVER_ADDRESS "tcp://127.0.0.1:5555" // 服务器地址
// 定义生成json的函数
char* generate_json() {
json_t *root = json_object();
json_object_set_new(root, "module", json_string("1"));
json_object_set_new(root, "from", json_string("2"));
json_object_set_new(root, "time", json_string(""));
json_object_set_new(root, "service", json_string("get_dp_version"));
json_object_set_new(root, "args", json_array());
char *output = json_dumps(root, JSON_COMPACT);
json_decref(root);
return output;
}
int main() {
int sock = nn_socket(AF_SP, NN_REQ); // 创建一个REQ类型的socket
if (sock < 0) {
fprintf(stderr, "nn_socket error: %s\n", nn_strerror(nn_errno()));
return -1;
}
if (nn_connect(sock, SERVER_ADDRESS) < 0) { // 连接服务器地址
fprintf(stderr, "nn_connect error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
char *request = generate_json(); // 调用生成json的函数
int request_len = strlen(request) + 1;
int bytes = nn_send(sock, request, request_len, 0); // 发送请求消息
if (bytes < 0) {
fprintf(stderr, "nn_send error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
printf("client sent: %s\n", request);
char *buf = NULL;
bytes = nn_recv(sock, &buf, NN_MSG, 0); // 接收回复消息
if (bytes < 0) {
fprintf(stderr, "nn_recv error: %s\n", nn_strerror(nn_errno()));
nn_close(sock);
return -1;
}
printf("client received: %s\n", buf);
nn_freemsg(buf); // 释放接收到的消息内存
nn_close(sock); // 关闭socket
return 0;
}
```
这个客户端代码中,我新增了一个 `generate_json()` 函数,用于生成您所需的json字符串。在主函数中,将调用该函数生成的字符串作为请求消息发送给服务器。