//Sending UDP message to TFTP server
//dgram modeule to create UDP socket
var express= require('express'), fs= require('fs'),path = require('path'),util = require('util'),dgram= require('dgram'),client= dgram.createSocket('udp4'),bodyParser = require('body-parser'),app = express(), ejs = require('ejs');
var plotly = require('plotly')("Patidar2", "9z2dlsvsqn")
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
app.use(express.static('public'));
//Reading in the html file for input page
app.get('/', function(req, res){
var html = fs.readFileSync('index2.html');
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(html);
});
//reading in html file for output page
app.get('/output', function(req, res){
var html = fs.readFileSync('index4.html');
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(html);
});
//Recieving UDP message
app.post('/output', function(req, res){
var once= req.body.submit;
if (once == "Once") {
//Define the host and port values of UDP
var HOST= req.body.ip;
var PORT= req.body.port;
//Reading in the user's command, converting to hex
var message = new Buffer(req.body.number, 'hex');
//Sends packets to TFTP
client.send(message, 0, message.length, PORT, HOST, function (err, bytes) {
if (err) throw err;
});
//Recieving message back and printing it out to webpage
client.on('message', function (message) {
fs.readFile('index3.html', 'utf-8', function(err, content) {
if (err) {
res.end('error occurred');
return;
}
var temp = message.toString(); //here you assign temp variable with needed value
var renderedHtml = ejs.render(content, {temp:temp, host: HOST, port: PORT}); //get redered HTML code
res.end(renderedHtml);
//var data = [{x:[req.body.number], y:[temp], type: 'scatter'}];
//var layout = {fileopt : "overwrite", filename : "simple-node-example"};
/* plotly.plot(data, layout, function (err, msg) {
if (err) return console.log(err);
console.log(msg);
}); */
});
});
}
//Send UDP packet continuously every ten seconds
if (once == "continuous") {
var timesRun = 0;
var requestLoop = setInterval(function(){
timesRun += 1;
if(timesRun === 2){
clearInterval(requestLoop);
}
//Define the host and port values of UDP
var HOST= req.body.ip;
var PORT= req.body.port;
//Reading in the user's command, converting to hex
var message = new Buffer(req.body.number, 'hex');
//Sends packets to TFTP
client.send(message, 0, message.length, PORT, HOST, function (err, bytes) {
if (err) throw err;
});
}, 10000);
//Recieving message back and printing it out to webpage
client.on('message', function (message) {
var HOST= req.body.ip;
var PORT= req.body.port;
fs.readFile('index3.html', 'utf-8', function(err, content) {
if (err) {
res.end('error occurred');
return;
}
var temp = message.toString(); //here you assign temp variable with needed value
var renderedHtml = ejs.render(content, {temp:temp, host: HOST, port: PORT}); //get redered HTML code
res.write(renderedHtml);
//var data = [{x:[req.body.number], y:[temp], type: 'scatter'}];
//var layout = {fileopt : "overwrite", filename : "simple-node-example"};
//plotly.plot(data, layout, function (err, msg) {
//if (err) return console.log(err);
//console.log(msg);
//});
});
});
}
});
//Setting up listening server
app.listen(3000, "192.168.0.136");
console.log('Listening at 192.168.0.136:3000');
setInterval을 사용하여 10 초마다 동일한 UDP 패킷을 보내는 연속 단추를 만들었지 만, 나는 index3.html에서 읽었습니다. 그 html 파일은 메시지가 수신 될 때마다 복제됩니다. 사진이 그걸 보여줍니다. 각 패킷 이후에 출력을 업데이트 할 수 있기를 원합니다.파일을 노드 js에 한 번 작성한 후 res.write를 지우시겠습니까?
소켓을 사용하는 것이 가장 좋은 방법이라는 것을 알고 있지만, 소켓을 사용하여 같은 디자인을 구현하는 방법에 대해서는 너무 분실했습니다. 소켓과 함께 app.post와 같은 것을 구현할 수 있습니까? – lord
@patidar - 앞서 설명한 것처럼 동일한 것을 구현하지 않습니다. 서버 쪽 알림을 얻으려면 새로운 아키텍처가 필요합니다. 'app.post()'에서 알림을 보내려고하면 잘못된 디자인 일 뿐이므로 작동하지 않습니다. – jfriend00