节点JS:Ping服务器和客户端UDP

我想创build一个小的ping脚本。 我是节点js的初学者。 我最终的小目标是让客户端ping服务器。 我希望服务器通过在控制台中logging消息来确认数据包,并且希望它将相同的数据包/消息发送回客户端。

这是我迄今为止:

服务器:

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++; }); 

更新:

谢谢! 这真的有帮助。 但是我还有一个问题。 假设我想以特定数量的字节发送数据包。 我会replace'message.length'1000为1kb的权利? 但是我得到一个错误'抛出新的错误('偏移+长度超出缓冲区长度');'

我不太明白为什么。

有一件事是发送数据,另一件事是接收它。 由于UDP协议是双向的,所以实际上客户端和服务器之间没有严格的区别。 所以你的服务器和客户端代码几乎是一样的,不同的是实际上一个会发送数据包,其他的只会响应。 另外请注意,你有一个无限循环,因为你可能使用带有PORTHOSTvariables的.send ,你必须发送到不同的主机/端口对。

这是一个例子:

服务器

 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" );