Node.js - UDP Socket
데이터 수신
dgram.createSocket(type, [callback])
type 에는 udp4, udp6, unix_dgram 지정 가능.
콜백은 message 이벤트가 발생했을 때의 내용을 기술.
function (msg, rinfo) { }
버퍼(msg)와 송신자 정보와 데이터의 바이트 수를 표시하는 정보(rinfo)로 구성된다.
간단 예제
UDP로 온 문자열을 표시하는 프로그램. 수신한 데이터는 그냥 바이트 열이므로 toString을 사용하여 문자열(ascii 문자열)로 변환한다.
var dgram = require('dgram');
sock = dgram.createSocket("udp4", function (msg, rinfo) {
console.log('got message from '+ rinfo.address +':'+ rinfo.port);
console.log('data len: '+ rinfo.size + " data: "+
msg.toString('ascii', 0, rinfo.size));
});
sock.bind(8000, '0.0.0.0');
UDP 송신
dgram.send(buf, offset, length, port, address, [callback])
DNS 오류 등이 일어났을 때용으로 콜백도 지정할 수 있다(생략 가능). 보내는 데이터는 buf에서 지정된 데이터로부터 offset, length로 위치를 지정할 수 있지만, 그냥 단순히 문자열을 생성하고 보내는 경우는 기본적으로 offset=0, length=buf.length를 지정하는 형태가 된다. 영상 등의 큰 데이터를 분할하여 보내는 경우 등에는 offset, length를 활용할 필요가 있다.
또한 buf에 관해서는 콜백 블록이 실행 되기 전 시점에서 재사용해서는 안 된다.
예제 코드
var dgram = require('dgram');
sock = dgram.createSocket("udp4", function (msg, rinfo) {
console.log('got message from '+ rinfo.address +':'+ rinfo.port);
console.log('data len: '+ rinfo.size + " data: "+
msg.toString('ascii', 0, rinfo.size));
var message = new Buffer("nantekottai.");
sock.send(message, 0, message.length, rinfo.port, rinfo.address);
});
sock.bind(8000, '0.0.0.0');
이 글은 2019-04-18에 작성되었습니다.