如果要在端口上的服务器和客户端之间进行通信,则需要在服务器上创建 tcp 连接。
在 tcp 连接中的通信方式与 http 请求不同。如果您的设备发送到端口上的数据,它将在专用服务器上与定义的端口一起接收。
在用于 tcp 连接的 node.js 中,我们需要 require 'net' 模块
var net = require("net");
要创建服务器,将使用以下行
var server = net.createServer({allowHalfOpen: true});
我们需要编写以下行以在专用端口上接收客户端请求。
server.on('connection', function(stream) {
});
server.listen(6969);
这里 6969 是端口。
下面给出了完整的片段来创建 tcp 连接的服务器。
// server.js
var net = require("net");
global.mongo = require('mongoskin');
var serverOptions = {
'native_parser': true,
'auto_reconnect': true,
'poolSize': 5
};
var db = mongo.db("mongodb://127.0.0.1:27017/testdb", serverOptions);
var PORT = '6969';
var server = net.createServer({allowHalfOpen: true});
// listen connection request from client side
server.on('connection', function(stream) {
console.log("New Client is connected on " + stream.remoteAddress + ":" + stream.remotePort);
stream.setTimeout(000);
stream.setEncoding("utf8");
var data_stream = '';
stream.addListener("error", function(err) {
if (clients.indexOf(stream) !== -1) {
clients.splice(clients.indexOf(stream), 1);
}
console.log(err);
});
stream.addListener("data", function(data) {
var incomingStanza;
var isCorrectJson = false;
db.open(function(err, db) {
if (err) {
AppFun.errorOutput(stream, 'Error in connecting database..');
} else {
stream.name = stream.remoteAddress + ":" + stream.remotePort;
// Put this new client in the list
clients.push(stream);
console.log("CLIENTS LENGTH " + clients.length);
//handle json whether json is correct or not
try {
var incomingStanza = JSON.parse(data);
isCorrectJson = true;
} catch (e) {
isCorrectJson = false;
}
// Now you can process here for each request of client
});
stream.addListener("end", function() {
stream.name = stream.remoteAddress + ":" + stream.remotePort;
if (clients.indexOf(stream) !== -1) {
clients.splice(clients.indexOf(stream), 1);
}
console.log("end of listener");
stream.end();
stream.destroy();
});
});
server.listen(PORT);
console.log("Vent server listening on post number " + PORT);
// on error this msg will be shown
server.on('error', function(e) {
if (e.code == 'EADDRINUSE') {
console.log('Address in use, retrying...');
server.listen(5555);
setTimeout(function() {
server.close();
server.listen(PORT);
}, 1000);
}
if (e.code == 'ECONNRESET') {
console.log('Something Wrong. Connection is closed..');
setTimeout(function() {
server.close();
server.listen(PORT);
}, 1000);
}
});
现在是时候为 tcp 服务器创建一个客户端了
从 clint 我们将发送所有请求以进行连接以获得可能的结果
//client.js
var net = require('net');
var client = net.connect({
//host:'localhost://',
port: 6969
},
function() { //'connect' listener
console.log('client connected');
var jsonData = '{"cmd":"test_command"}';
client.write(jsonData);
});
client.on('data', function(data) {
console.log(data.toString());
// client.end();
});
client.on('end', function() {
console.log('client disconnected');
});
现在我们在 tcp 通信中同时拥有服务器和客户端。
要准备好监听服务器,我们需要在控制台中点击命令“node server.js”。
之后该服务器将准备好监听来自客户端的请求
要从客户端拨打电话,我们需要点击命令“node client.js”
如果您可以根据您的实际要求进行修改,它将更有意义和有价值。
谢谢