[Node.js] socket 實作2:伺服器端與客戶端的監聽通訊(UDP)

UDP 資料封包有著明顯的區別, UDP 資料封包發送到伺服器後,伺服器一般是不能回寫給用戶端的,而 TCP 資料封包是完全可以的。

Server 端程式

var dgram = require('dgram'); // 引入 UDP/Datagram 模組
var HOST = '127.0.0.1';
var PORT = 12345;


console.info('Now create UDP Server...');
// 建立 UDP 伺服器
// 使用 dgram.createSocket() 方法建立一個 UDP 伺服器
// udp4 類型的資料通訊端,對應到的是 IPv4 協定;另有 udp6,對應的是 IPv6 協定
var server = dgram.createSocket('udp4');

// 為 UDP 伺服器新增一個 listening 事件函式
server.on('listening', function(){
  var address = server.address(); // 取得伺服器的位址和port
  console.log('UDP Server listening on ' + address.address + ':' + address.port);
});

// 為 UDP 伺服器新增一個 message 事件函式
server.on('message', function(message, remote){
  console.log('UDP Server received from ' + remote.address + ':' + remote.port);
  console.log(' - ' + message);
  server.close();
});

// 為 UDP 伺服器新增一個 error 事件函式
server.on('error', function(err){
  console.log('Server error:\n' + err.stack);
  server.close();
});

// 為 UDP 伺服器新增一個 close 事件函式
server.on('close', function(err){
  console.log('Server closed');
});

// 為 UDP 伺服器鎖定主機和 port
server.bind(PORT, HOST);

Client 端程式

var dgram = require('dgram'); // 引入 UDP/Datagram 模組
var HOST = '127.0.0.1';
var PORT = 12345;

// 定義資料封包
var message = new Buffer('UDP Client to Server: 哈囉 Server!');

// 建立 UDP 用戶端
console.info('Now create UDP Client...');

// 使用 dgram.createSocket 方法建立一個 UDP 用戶端
var client = dgram.createSocket('udp4');

// 向伺服器發送 UDP 資料封包
client.send(message, 0, message.length, PORT, HOST, function(err, bytes){
  if(err) throw err;
  console.log('UDP message sent to ' + HOST + ':' + PORT);
  console.info(bytes); // bytes 為用戶端發送到伺服器端資料封包的位元組長度

  // 關閉用戶端
  client.close();
});

// 為 UDP 用戶端新增一個 close 事件函式
client.on('close', function(){
  console.log('client disconnected');
});

您可在此處留言

搶先留言!

Notify of
avatar
wpDiscuz