我正在使用UDP協議編寫一個簡單的客戶端服務器NodeJS應用程序。這個應用程序的要點是它需要使用代理程序,在特定情況下,其功能是將發件人與接收程序鏈接起來。這些要求告訴我,發件人不需要知道收件人的IP地址和端口號 - 它只需要知道代理的相應IP和端口。之後,代理將根據服務器的IP和端口將客戶的消息發送到服務器。NodeJS使用代理的簡單UDP客戶端服務器應用程序
爲了澄清前款規定的,下面你會發現什麼,我到目前爲止已經做了說明(迷惑):
sender.js
var PORT1 = XXXXX;
var HOST = '127.0.0.1';
var fs = require('fs');
var dgram = require('dgram');
var client = dgram.createSocket('udp4');
fs.readFile('Path/to/the/file','utf8', function (err, data) {
if (err) throw err;
var message = new Buffer(data);
client.send(data, 0, message.length, PORT1, HOST, function(err, bytes) {
if (err) throw err;
console.log('UDP message sent to ' + HOST +':'+ PORT1);
client.close();
});
});
上面的代碼從文件讀取,將其內容存儲在緩衝區中,並將其發送到代理的端口(代理偵聽同一端口)和主機(在我的情況下是本地主機)。
broker.js
var PORT1 = XXXXX;
var PORT2 = YYYYY;
var HOST = '127.0.0.1';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var client = dgram.createSocket('udp4');
server.on('listening', function() {
var address = server.address();
console.log('UDP broker listening on ' + address.address + ":" + address.port);
});
server.on('message', function (message, remote) {
client.send(message, 0, message.length, PORT2, HOST, function(err, bytes) {
if (err) throw err;
console.log('UDP message sent to ' + HOST +':'+ PORT2);
client.close();
});
console.log(remote.address + ':' + remote.port +' - ' + message);
});
server.bind(PORT1, HOST);
這裏,PORT1是代理監聽(從發送者等待傳入的消息)的端口和PORT2是發送消息到接收器的端口(和相應地,所述接收者聽這個端口)。
receiver.js
var PORT2 = YYYYY;
var HOST = '127.0.0.1';
var fs = require('fs');
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var parser = require('xml2json');
server.on('listening', function() {
var address = server.address();
console.log('UDP receiver listening on ' + address.address + ":" + address.port);
});
server.on('message', function (message, remote) {
console.log(remote.address + ':' + remote.port +' - ' + message);
var contents = fs.writeFile("/Path/To/Written/File", parser.toJson(message),
function(error){
if (error) {
console.log("error writing");
}
console.log("File was saved");
});
});
server.bind(PORT2, HOST);
接收器從代理獲取消息,並將其寫入到JSON格式的文件。
下面是結果:
發件人
UserName's-MacBook-Pro:UDP server UserName$ node sender.js
UDP message sent to 127.0.0.1:XXXXX
經紀人
UserName's-MacBook-Pro:UDP server UserName$ node broker.js
UDP broker listening on 127.0.0.1:XXXXX
127.0.0.1:60009 - <?xml version="1.0"?>
<Some XML content here>
</XML content ends here>
UDP message sent to 127.0.0.1:YYYYY
接收機
UserName's-MacBook-Pro:UDP server UserName$ node receiver.js
UDP receiver listening on 127.0.0.1:YYYYY
127.0.0.1:63407 - <?xml version="1.0"?>
<XML contents here>
</XML content ends here>
File was saved
對於這篇較長的文章,我很抱歉,但是我想指定所有的細節以消除(希望)任何含糊之處。現在,爲了此事,
這裏是我的問題
我應該爲了解決以下問題作出經紀人什麼變化:
在多個發送者和接收者的情況下,經紀人應管理端口以將發件人鏈接到收件人(使用任何指定的標準)。
預先感謝您!