TCP/IP服务器如何向HTTP服务器写数据?



这是我的tcp/ip服务器,监听物联网传感器发送数据:

const net = require('net')
const server = net.createServer(socket => {
socket.on('data', data => {
console.log(data.toString())
})
}).listen(1234)

我收到的数据很好。接收到的一行数据看起来像' data,zoneA,20'

现在我想写数据流到这个http服务器:

const express = require('express')
const morgan = require('morgan')
const app = express()
const bodyParser = require('body-parser')
const {PORT} = 3000
app.use(morgan('tiny'))
app.use(express.json())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))

const catchTCP = async dataLine => {
dataLine = 'DATA,zoneA,20' 
try {
if (dataLine.indexOf("DATA") >= 0) {
var stream = dataLine.split(",")
var streamData = {
zone: stream[1],
battery: stream[2]
}
console.log(streamData)
}
} catch(err) {
console.log("error:", err)
}
}
catchTCP()
app.listen(PORT, () => console.log(`App listening at http://localhost:${PORT}`))

我想用这个TCP/IP数据的入口点替换'dataLine'对象。将TCP/IP数据转发到HTTP服务器端口的最佳方式是什么?

两个服务器运行在同一个网络上,所以我被告知是socket。IO不是最合适的。

将HTTP服务器上的catchTCP函数替换为中间件路由:

app.post("/receive", express.text(), function(req, res) {
var dataLine = req.body;
/* Your code from catchTCP */
res.end(); /* finish the HTTP response */
});

那么你的TCP/IP服务器可以发送一个HTTP请求,代码如下:

var s = net.createConnection(PORT, "localhost", function() {
s.end(`POST /receive HTTP/1.1
Content-Type: text/plain
Content-Length: ${data.toString().length}
${data}`);
});

这是HTTP请求的TCP/ip级表示。但我不会这样做,我宁愿使用合适的HTTP客户机。这不是一个问题,如果你的TCP/IP服务器是在Node.js编程:

const http = require("http");
http.request("http://localhost:${PORT}/receive", {
method: "POST",
headers: {"Content-Type": "text/plain"}
}).end(data.toString());

最新更新