2012-11-12 14 views
6

मैं एक छोटी पिंग स्क्रिप्ट बनाना चाहता हूं। मैं नोड जेएस में एक नौसिखिया हूँ। मेरा अंतिम छोटा लक्ष्य क्लाइंट को सर्वर पिंग करना है। मैं चाहता हूं कि सर्वर कंसोल में संदेश लॉग इन करके पैकेट को स्वीकार करे और मैं चाहता हूं कि वह ग्राहक को उसी पैकेट/संदेश को वापस भेज दे।नोड जेएस: पिंग सर्वर और क्लाइंट यूडीपी

यह वही है मैं अब तक है:

सर्वर:

var PORT = 33333; 
var HOST = '127.0.0.1'; 

var dgram = require('dgram'); 
var server = dgram.createSocket('udp4'); 

server.on('listening', function() { 
    var address = server.address(); 
    console.log('UDP Server listening on ' + address.address + ":" + address.port); 
}); 

server.on('message', function (message, remote) { 

    console.log(remote.address + ':' + remote.port +' - ' + message); 
    // I added a server.send but it gave me an infinite loop in the server console 

}); 

server.bind(PORT, HOST); 

ग्राहक:

var PORT = 33333; 
var HOST = '127.0.0.1'; 

var dgram = require('dgram'); 
var message = new Buffer('My KungFu is Good!'); 

var client = dgram.createSocket('udp4'); 

client.on('message', function (message, remote) { 

    console.log("The packet came back"); 

}); 


client.send(message, 0, message.length, PORT, HOST, function(err, bytes) { 
    if (err) throw err; 
    console.log('UDP message sent to ' + HOST +':'+ PORT); 
    count++; 
}); 

अद्यतन:

धन्यवाद! वास्तव में मदद की। लेकिन मेरे पास एक और सवाल है। मान लें कि मैं पैकेट को विशिष्ट बाइट्स में भेजना चाहता हूं। मैं 1kb के लिए 1000 के साथ 'message.length' को प्रतिस्थापित करूँगा? लेकिन मुझे एक त्रुटि मिलती है 'नई त्रुटि फेंक दें (' ऑफसेट + लंबाई बफर लंबाई से परे ');'

मुझे समझ में नहीं आता क्यों।

उत्तर

9

एक बात डेटा भेज रही है और दूसरी चीज इसे प्राप्त कर रही है। चूंकि यूडीपी प्रोटोकॉल द्विदिशशील है, इसलिए वास्तव में क्लाइंट और सर्वर के बीच कोई सख्त अंतर नहीं है। तो आपका सर्वर और क्लाइंट कोड लगभग समान होगा, अंतर यह है कि वास्तव में कोई पैकेट भेजेगा और अन्य केवल जवाब देगा। यह भी ध्यान रखें कि आपके पास अनंत लूप है, क्योंकि शायद आप .sendPORT और HOST चर के साथ उपयोग कर रहे हैं और आपको विभिन्न होस्ट/पोर्ट जोड़ी को भेजना होगा।

सर्वर

var host = "127.0.0.1", port = 33333; 

var dgram = require("dgram"); 

var server = dgram.createSocket("udp4"); 

server.on("message", function(msg, rinfo) { 
    console.log(rinfo.address + ':' + rinfo.port + ' - ' + msg); 
    server.send(msg, 0, msg.length, rinfo.port, rinfo.address); // added missing bracket 
}); 
server.bind(port, host); 

ग्राहक

// NOTE: the port is different 
var host = "127.0.0.1", port = 33334; 

var dgram = require("dgram"); 

var client = dgram.createSocket("udp4"); 

client.on("message", function(msg, rinfo) { 
    console.log("The packet came back"); 
}); 

// client listens on a port as well in order to receive ping 
client.bind(port, host); 

// proper message sending 
// NOTE: the host/port pair points at server 
var message = new Buffer("My KungFu is Good!"); 
client.send(message, 0, message.length, 33333, "127.0.0.1"); 
+0

धन्यवाद:

यहाँ एक उदाहरण है! वास्तव में मदद की। लेकिन मेरे पास एक और सवाल है। मान लें कि मैं पैकेट को विशिष्ट बाइट्स में भेजना चाहता हूं। मैं 1kb के लिए 1000 के साथ 'message.length' को प्रतिस्थापित करूँगा? लेकिन मुझे एक त्रुटि मिलती है 'नई त्रुटि फेंक दें (' ऑफसेट + लंबाई बफर लंबाई से परे ');' मुझे समझ में नहीं आता क्यों। –

+0

क्योंकि आपका बफर 18 बाइट लंबा है ("मेरा कुंगफू अच्छा है!" लंबाई, डिफ़ॉल्ट कोडेक एसीआई/बाइनरी बाइट प्रति चरित्र है)। 'Var message = new Buffer (1000); '1000 बाइट भेजने के लिए अपना संदेश बनाएं –

संबंधित मुद्दे