Node.js dgram 모듈 UDP 통신 예시 코드 구현
7847 단어 NodeUDP커 뮤 니 케 이 션
여기 서 간단하게 소개 하 자 면 UDP,즉 사용자 데이터 보고 프로 토 콜 은 연결 되 지 않 은 전송 층 프로 토 콜 을 대상 으로 신뢰 할 수 없 는 메시지 전송 서 비 스 를 제공한다.UDP 프로 토 콜 은 포트 번 호 를 서로 다른 응용 프로그램 으로 사용 하여 각자 의 데이터 전송 채널 을 유지 하 는 것 이 중요 하 다.TCP 에 비해 차지 하 는 자원 이 적 고 전송 속도 가 빠르다.
2.UDP 단독 방송,방송 및 그룹 방송
단일 방송:단일 방송 주소 에 UDP 데이터 메 시 지 를 보 낼 때 데이터 메 시 지 는 지정 한 IP 호스트 만 받 을 수 있 고 같은 서브 네트워크 의 다른 호스트 는 이 데이터 메 시 지 를 받 지 않 습 니 다.단일 방송 과정(서브 네트워크 주소:192.168.10 을 가정 하면 이 서브 네트워크 아래 에 두 대의 호스트 가 있다.192.168.10.2,192.168.10.3,192.168.10.2 에 데이터 보 를 보낸다)
1.호스트 192.168.10.2 의 8060 포트 에 데이터 보고 서 를 보 냅 니 다.이 IP 데이터 보고 대상 IP 는 이 더 넷 에서 ARP 에 의 해 MAC 주소 로 분 석 된 다음 에 이 MAC 주 소 를 대상 주소 로 설정 하여 보 냅 니 다.
2.이 서브 넷 의 호스트 이 더 넷 인터페이스 에서 이 데이터 프레임 을 볼 때 자신의 MAC 주 소 를 비교 하고 다 르 면 이 데이터 프레임 을 무시 합 니 다.
3.192.168.10.2 호스트 가 이 데이터 프레임 을 보 았 을 때 MAC 가 일치 하 는 것 을 발견 하면 이 데이터 프레임 을 읽 은 다음 에 IP 층 에서 목표 IP 와 본 컴퓨터 IP 를 비교 하고 UDP 층 에서 포트 번호 가 일치 하 는 지 확인 한 다음 에 이 데이터 프레임 을 받는다.
방송:한 방송 주소 에 UDP 데이터 보 를 보 내 면 이 방송 네트워크 의 모든 호스트 가 영향 을 받 고 호스트 는 포트 번호 에 따라 이 데 이 터 를 버 릴 지 여 부 를 판단 합 니 다.방송 과정(서브 네트워크 주소:192.168.10 을 가정 하면 이 네트워크 의 방송 주 소 는 192.168.10.255 이 고 이 서브 네트워크 아래 에 두 개의 호스트 가 있다.192.168.10.2,192.168.10.3,192.168.10.255 에 데이터 보 고 를 보낸다).
1.192.168.10.255 호스트 포트 에 8060 으로 데이터 보고 서 를 보 냅 니 다.이 IP 데이터 보고 대상 IP 는 이 더 넷 에서 ARP 에 의 해 MAC 주소 로 분 석 된 다음 에 이 MAC 주 소 를 대상 주소 로 설정 하여 보 냅 니 다.
2.192.168.10.2 와 192.168.10.3 의 호스트 인 터 페 이 스 는 이 방송 주소 와 일치 합 니 다.이 데이터 가 전송 층 에 들 어 갈 때 포트 에 따라 이 데 이 터 를 버 릴 지 여 부 를 판단 하고 포트 가 8060 인 경우 이 데 이 터 를 보존 합 니 다.그렇지 않 으 면 데 이 터 를 버 립 니 다.
멀티캐스트:한 멀티캐스트 주소 에 UDP 데이터 보 를 보 냅 니 다.이 네트워크 의 모든 호스트 가 영향 을 받 고 호스트 는 포트 번호 에 따라 이 데 이 터 를 버 릴 지 여 부 를 판단 합 니 다.조방 과정의 원 리 는 방송 과 유사 하 다.
3.dgram 모듈 API 소개
이 모듈 은 UDP 데이터 보고 socket 을 만 드 는 데 사용 되 며 EventEmitter 를 계승 합 니 다.이 모듈 의 API 는 다음 과 같 습 니 다.
3.UDP 단독 방송 실현
단일 방송의 원 리 는 위 에서 이미 말 했 으 니,여 기 는 더 이상 서술 하지 않 겠 다.
서버:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('close',()=>{
console.log('socket ');
});
server.on('error',(err)=>{
console.log(err);
});
server.on('listening',()=>{
console.log('socket ...');
});
server.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
server.send('exit',rinfo.port,rinfo.address)
});
server.bind('8060');
클 라 이언 트:
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
client.on('close',()=>{
console.log('socket ');
});
client.on('error',(err)=>{
console.log(err);
});
client.on('message',(msg,rinfo)=>{
if(msg=='exit') client.close();
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
client.send(`hello`,8060,'1.1.1.69');
3.UDP 방송 실현UDP 방송 을 실현 하려 면 반드시 방송 주 소 를 알 아야 하 는데,방송 주 소 는 어떻게 계산 합 니까?ipconfig(windows)나 ifconfig(*unix)를 이용 하여 ip 주소 와 mask 마스크 주 소 를 얻 은 다음 에 ip 주소 와 mask 서브 네트워크 마스크 를 이용 하여 네트워크 주 소 를 얻 을 수 있 습 니 다.네트워크 주소 의 호스트 위 치 는 모두 1 이 바로 방송 주소 입 니 다.예 를 들 어:
IP:149.88.160.58
mask:11111111.11111111.11000000.00000000
IP&MASK 네트워크 주소:149.88.28.0/18
네트워크 번 호 는 호스트 위치 가 모두 0 인 149.88.1000.000000 즉 149.88.28.0 이다.
방송 주 소 는 호스트 위치 가 모두 1 인 149.88.10111111111111 즉 149.88.191.255 이다.
이어서 UDP 방송 을 실현 합 니 다.우리 기기 의 IP 는 1.1.1.69 이 고 마스크 는 255.255.255.255.0 입 니 다.따라서 방송 주 소 는 1.1.1.255 이 고 서버 는 방송 주소 의 8061 포트 에 데이터 보 고 를 보 냅 니 다.클 라 이언 트 는 본 기기 의 8061 포트 를 연결 합 니 다.다음 과 같 습 니 다.
서버:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
server.on('close',()=>{
console.log('socket ');
});
server.on('error',(err)=>{
console.log(err);
});
server.on('listening',()=>{
console.log('socket ...');
server.setBroadcast(!0);//
server.setTTL(128);
server.send(' , .',8061,'1.1.1.255');
});
server.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
server.bind('8060','1.1.1.69');
클 라 이언 트:
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
client.on('close',()=>{
console.log('socket ');
});
client.on('error',(err)=>{
console.log(err);
});
client.on('listening',()=>{
console.log('socket ...');
});
client.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}:${msg}`);
});
client.bind(8061,'1.1.1.69');
3.UDP 조방 실현멀티캐스트 주 소 는 UDP 멀티캐스트 를 실현 하 는 관건 이 므 로 멀티캐스트 주 소 를 파악 하 는 것 이 중점 이다.그룹 방송 주소 가 뭐 예요?IANA 는 D 클래스 주소(224.0.0.0-239.255.255.255)를 IP 그룹 에 배정 하여 IP 그룹 을 표시 하고 IGMP(그룹 관리 프로 토 콜)프로 토 콜 로 팀 구성원 관 계 를 유지 합 니 다.그 중에서:
224.0.0.0~224.0.0.255 는 영구 그룹 주소 이 고 주소 224.0.0.0.0 은 분 배 를 하지 않 으 며 다른 주 소 는 협의 에 의 해 사용 하도록 제공 합 니 다.
224.0.1.0~224.0.1.255 는 공용 그룹 방송 주소 로 인터넷 에 사용 할 수 있다.
224.0.2.0~238.2555.255 는 사용자 가 사용 할 수 있 는 그룹 방송 주소(임시 그룹 주소)로 전체 네트워크 범위 에서 유효 합 니 다.
239.0.0.0~239.255.255.255 는 로 컬 관리 팀 의 방송 주소 로 특정한 로 컬 범위 에서 만 유효 합 니 다.
그룹 방송 주소 에 데이터 보 를 보 내 면 이 그룹 구성원 만 이 데이터 보 를 받 을 수 있 습 니 다.
dgram 모듈 의 addMembership()방법 은 socket 을 그룹 방송 그룹 에 가입 하고 dropMembership()방법 은 그룹 방송 그룹 에서 탈퇴 합 니 다.다음은 멀티캐스트 주소 224.100.100.100 으로 UDP 멀티캐스트 를 실현 한다.다음 과 같다.
서버:
const dgram = require('dgram');
const server = dgram.createSocket('udp4');
const multicastAddr = '224.100.100.100';
server.on('close',()=>{
console.log('socket ');
});
server.on('error',(err)=>{
console.log(err);
});
server.on('listening',()=>{
console.log('socket ...');
server.addMembership(multicastAddr);
server.setMulticastTTL(128);
setInterval(()=>{
sendMsg();
},1500);
});
server.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
function sendMsg(){
server.send(' , .',8061,multicastAddr);
}
server.bind('8060','1.1.1.69');
클 라 이언 트:
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
const multicastAddr = '224.100.100.100';
client.on('close',()=>{
console.log('socket ');
});
client.on('error',(err)=>{
console.log(err);
});
client.on('listening',()=>{
console.log('socket ...');
client.addMembership(multicastAddr);
});
client.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}:${msg}`);
});
client.bind(8061,'1.1.1.69');
또한 UDP 내부 망 관통 과 관련 된 내용 은 여러분 스스로 알 아 보 실 수 있 습 니 다.여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NestJs Guard하지만 가드는 ExcutionContext를 사용할 수 있기 때문에 다음에 어떠한 라우트 핸들러가 실행되는지 정확하게 알 수 있다. ExecutionContext는 ArgumentsHost를 상속 받았기 때문에 각 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.