C++ 如何在express中通过TCP套接字将JSON文件写入C++;程序
这与问题有关 我目前正在编写程序的客户端部分,它应该在express.jsvar中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
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)
});
我这里有一些问题
#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拒绝。现在是时候立即执行您应该执行的操作了:在服务器程序中添加错误检查。您调用的所有套接字函数都可能失败,但您只需检查读取
。