UDP로 LAN 장치 검색
-
먼저 컴퓨터에서 UDP 메시지를 수신할 포트를 엽니다.
-
그런 다음 다음 UDP 브로드캐스트 내용을 LAN의 46953 포트로 전송합니다.
{"ip":"컴퓨터 측 IP 주소","port":50000} // port는 컴퓨터 측 수신 포트입니다 -
장치는 이 브로드캐스트를 받으면 컴퓨터의 메시지 수신 포트로 다음과 같이 응답합니다.
{
"ip":"192.168.31.99",
"port":"46952",
"devname":"기기 이름",
"deviceid":"123456789012345678901234567890123456790", // 장치 UDID
"devsn":"XXXXXXXXXXXX", // 장치 일련번호
"devmac":"02:03:04:05:06:07", // 장치 WiFi MAC 주소
"devtype":"iPhone8,1", // 장치 모델
"zeversion":"0.0.1.738", // 서비스 버전
"sysversion":"9.0.2" // 시스템 버전
} -
컴퓨터 측 UDP LAN 장치 검색 예제(Python 3.x용):
# -*- coding: utf-8 -*-
import socket
import json
local_ip = '192.168.31.13' # 컴퓨터 측 주소
local_port = 31500
local = (local_ip, local_port)
remote = ("255.255.255.255", 46953)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(local)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto(json.dumps({"ip": local_ip, "port": local_port}).encode('utf-8'), remote) # UTF-8로 인코딩
while True:
data, addr = s.recvfrom(2048)
if not data:
print("client has exited") # print() 함수 사용
break
print("received:", data, "from", addr) # print() 함수 사용
s.close() -
컴퓨터 측 UDP LAN 장치 검색 예제(Node.js용):
var http = require('http'); //HTTP 서비스
var dgram = require('dgram'); //UDP 모듈
var server_Port = 31500; //서버 포트
var client_Port = 31501; //송신 포트
var device_List = {}; //장치 목록
//수신 서비스 생성
var server_Socket = dgram.createSocket('udp4');
server_Socket.on('message', function(msg, rinfo){
console.log('收到消息:%s', msg);
var device_Info = JSON.parse(msg)
//중복 필터링
if(device_Info.deviceid){
device_List[device_Info.deviceid] = device_Info;
}
});
server_Socket.bind(server_Port);
//송신 서비스 생성
var client_Socket = dgram.createSocket('udp4');
client_Socket.bind(client_Port);
var search = function(){
var server_List = new Array();
var os = require('os');
var ifaces = os.networkInterfaces();
for (var dev in ifaces) {
var alias = 0;
ifaces[dev].forEach(function(details){
if (details.family=='IPv4') {
server_List.push(details.address);
++alias;
}
});
};
for(var address in server_List) {
var ip_ar = server_List[address].split(".");
var send2ip = ip_ar[0] + "." + ip_ar[1] + "." + ip_ar[2] + ".255";
var client_Socket = dgram.createSocket('udp4');
var msg = JSON.stringify({ip: server_List[address], port: server_Port});
client_Socket.send(msg, 0, msg.length, 46953, send2ip);
};
}
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'application/json'});
search()
response.end(
JSON.stringify(device_List)
);
}).listen(22222);
search()
console.log('Web 服务地址:http://127.0.0.1:22222/');