如何在Express到C ++程序中通过TCP套接字写入JSON文件 [英] How to write a JSON File over TCP Socket in express to C++ program

查看:28
本文介绍了如何在Express到C ++程序中通过TCP套接字写入JSON文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这与问题有关快递中的服务器-客户端体系结构有关.js

我目前正在编写应该在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)
});

我在这里有一些问题

  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 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆