如何在Express到C ++程序中通过TCP套接字写入JSON文件 [英] How to write a JSON File over TCP Socket in express to C++ program
本文介绍了如何在Express到C ++程序中通过TCP套接字写入JSON文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前正在编写应该在express.jsvar中的程序的客户端部分
I am currently writing the client part of the program which is supposed to be in express.jsvar
var request = require('request'),
express = require('express'),
path = require('path');
const net = require('net');
var app = express();
// for Express 4.16 above use this instead of
// using body-Parser: app.use(bodyParser.json())
app.use(express.json());
// configuration setting
const PORT1 = 5000;
const port2 = 5001;
const PORT3 = 1337;
const HOST = '127.0.0.1';
app.set('port', (process.env.PORT || PORT1));
var client = new net.Socket();
var id = 0;
// start a tcp connection to connect to server
client.connect(PORT3, HOST, function() {
console.log('SEND PORT CONNECTED TO: ' + HOST + ':' + PORT3);
});
// using Github for testing web hook
app.post('/getGithub', function(req, res)
{
// tester code
//var data = "20a980dc00b413dc3d0000a3";
//var data = "e36ace0044ed3d0cc3810000";
var data = req.body;
console.log(data);
client.write('Hello, server! Love, Client.' + id + " ");
client.write(data);
res.json(data);
});
// http server location
var server = app.listen(app.get('port'), function() {
var host = server.address().address
var portid = server.address().port
console.log('App listening at http://%s:%s', host, portid)
console.log("App listening on port " + app.get('port'));
});
// error handler
app.use(function (err, req, res, next) {
res.status(400).send(err.message)
});
我在这里有一些问题
- 如何将JSON对象写入服务器应用程序(C ++).我知道JSON.stringify(obj)将返回字符串并且可以被覆盖吗?
- 如何在另一端编写C ++程序?我已经编写了一些C ++程序,但是在使用另一个Express程序时似乎存在一些问题,这似乎还可以.当我运行C ++程序时,express中的客户端程序一直在给我ECONNECT拒绝
我的C ++程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <jsoncpp/json/json.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main()
{
/* all previous code until
printf("Reading from client\n"); */
int listenfd = 0, connfd = 0; //related with the server
int MAX_SIZE = 158;
struct sockaddr_in serv_addr;
//json_object * jobj;
char buf[MAX_SIZE], i;
memset(&buf, '0', sizeof(buf));
listenfd = socket(AF_INET, SOCK_STREAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
serv_addr.sin_port = htons(1337);
bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
printf("binding\n");
listen(listenfd, 5);
printf("listening\n");
connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
printf("Reading from client\n");
ssize_t r;
for (;;)
{
r = read(connfd, buf, MAX_SIZE);
if (r == -1)
{
perror("read");
return EXIT_FAILURE;
}
if (r == 0)
break;
printf("READ: %s\n", buf);
}
return EXIT_SUCCESS;
}
错误是:
Error: connect ECONNREFUSED 127.0.0.1:1337
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1198:14)
推荐答案
服务器无关紧要:guagua是服务器:发送Json字符串后,它与服务器无关:您可以拥有Java程序,C ++程序,甚至是Apache/PHP程序(在后一种情况下,通过HTTP调用,使用库或添加标头).
It doesn't matter wich languaje is the server: once you send a Json string, is server independent: You can have a java program, a C++ program, or even, a Apache/PHP program (in this last case, with a HTTP call, using a library, or adding the headers).
首先,您需要json数据
First you need your json data
var obj = { name: "John", age: 30, city: "New York" };
var myJSONData = JSON.stringify(obj);
然后,您应该进行原始套接字连接:
And then, you shoud do a raw socket connection:
var net = require('net');
var HOST = '127.0.0.1';
var PORT = 1337;
// (a) =========
var client = new net.Socket();
client.connect(PORT, HOST, function() {
console.log('CONNECTED TO: ' + HOST + ':' + PORT);
// Write a message to the socket as soon as the client is connected, the server will receive it as message from the client
client.write(myJSONData );
});
client.destroy();
这篇关于如何在Express到C ++程序中通过TCP套接字写入JSON文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文