如何在express-to-C++程序中通过TCP套接字编写JSON文件



这与关于express.js 中的服务器-客户端架构的问题有关

我目前正在编写程序的客户端部分,该部分应该在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)
});

我在这里有一些问题

  1. 如何将JSON对象写入服务器应用程序(C++(。我知道JSON。stringify(obj(会返回字符串,可以重写吗
  2. 如何在另一端编写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 clientn"); */
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("bindingn");
listen(listenfd, 5);
printf("listeningn");
connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
printf("Reading from clientn");
ssize_t r;
for (;;)
{
r = read(connfd, buf, MAX_SIZE);
if (r == -1)
{
perror("read");
return EXIT_FAILURE;
}
if (r == 0)
break;
printf("READ: %sn", 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)

哪种语言是服务器并不重要:一旦你发送了Json字符串,它就独立于服务器:你可以有一个java程序、一个C++程序,甚至一个Apache/PHP程序(在最后一种情况下,使用HTTP调用、使用库或添加头(。

首先你需要你的json数据

var obj = { name: "John", age: 30, city: "New York" };
var myJSONData = JSON.stringify(obj);

然后,你应该做一个原始的套接字连接:

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();

最新更新