C++ 如何在express中通过TCP套接字将JSON文件写入C++;程序

C++ 如何在express中通过TCP套接字将JSON文件写入C++;程序,c++,node.js,express,tcp,C++,Node.js,Express,Tcp,这与问题有关 我目前正在编写程序的客户端部分,它应该在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 bo

这与问题有关

我目前正在编写程序的客户端部分,它应该在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中的客户端程序一直在给我拒绝E/LIE。 <我的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;
    }
    

    <> P> >服务器是一个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();
    

    <> P> >服务器是一个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();
    

    您需要将其作为文本发送。服务器应该像接收任何其他数据一样接收数据。但请注意,它接收的数据将不是以null结尾的字符串。如果您想使用
    printf
    格式
    %s
    打印数据,您需要添加空终止符。@Someprogrammerdude:所以我应该称之为client.write(JSON.stringify(data));在服务器端(C++代码),我应该把传入的消息读成文本?是的,就是这样。但是请记住C++程序中的null终止子。@程序员:那么我能不能麻烦你为什么我的C++服务器程序不能工作?每次我启动它,然后使用客户端(express)时,它都会收到错误消息ECONNECT拒绝。现在是时候立即执行您应该执行的操作了:在服务器程序中添加错误检查。您调用的所有套接字函数都可能失败,但您只需检查
    read
    。您需要将其作为文本发送。服务器应该像接收任何其他数据一样接收数据。但请注意,它接收的数据将不是以null结尾的字符串。如果您想使用
    printf
    格式
    %s
    打印数据,您需要添加空终止符。@Someprogrammerdude:所以我应该称之为client.write(JSON.stringify(data));在服务器端(C++代码),我应该把传入的消息读成文本?是的,就是这样。但是请记住C++程序中的null终止子。@程序员:那么我能不能麻烦你为什么我的C++服务器程序不能工作?每次我启动它,然后使用客户端(express)时,它都会收到错误消息ECONNECT拒绝。现在是时候立即执行您应该执行的操作了:在服务器程序中添加错误检查。您调用的所有套接字函数都可能失败,但您只需检查
    读取