У меня есть Raspberry PI в моей сети. Я использую WebSocket для подключения к нему и отправки команд. Я подключаюсь к нему, просто вызывая эту строку кода: window.socket = new WebSocket(rpIP)
rpIP
может быть ws://10.58.3.146//ws
Но IP-адрес ПИ является динамическим c, поэтому я использую клиента (javascript) сканировать PI в сети. Я настроил PI для ответа на порт 58 как единственное устройство в сети.
Мой лог c заключается в том, что если я пытаюсь сделать запрос на все возможные 255 IP-адресов в сети, только один должен отвечать. Это прекрасно работает в настольном браузере. Я нахожу ПИ и могу отправлять ему команды. Но на мобильном устройстве (я пробовал и Android, и iOS) это не удается, я получаю следующую ошибку: net :: ERR_CONNECTION_REFUSED
Код сканера:
let myIp = '10.58.3.33';
let ipToCheck = 0;
let targetPort = 58;
let rpIP;
checkIp();
function checkIp() {
callError = false
if(ipToCheck < 255 && !rpIP) {
let ipArray = myIp.split('.');
ipArray[3] = ipToCheck;
addDebugMsg('Trying to connect to: ' + ipArray.join('.') + ':' + targetPort);
let loading = setInterval(function() {
addDebugMsg('.', false)
}, 500);
let request = new XMLHttpRequest();
request.open('GET', location.protocol + '//' + ipArray.join('.') + ':' + targetPort, true);
request.timeout = 1000;
request.onload = function(e) {
clearInterval(loading);
console.log(e)
if(request.status == 404) {
addDebugMsg('nope! - Pi\'s not here');
ipToCheck++;
checkIp();
} else {
addDebugMsg('YAY! - We found the Pi');
rpIP = protocol + '//' + ipArray.join('.') + '//ws';
ipToCheck++;
checkIp();
}
};
request.ontimeout = function() {
clearInterval(loading);
addDebugMsg('nope! - Pi\'s not here');
clearInterval(loading);
ipToCheck++;
checkIp();
}
request.send();
} else {
addDebugMsg('Scan done!');
if(rpIP) {
addDebugMsg('Found Rasberry PI at: ' + rpIP);
window.socket = new WebSocket(rpIP);
window.socket.onmessage = function(e) {
handleSocketMessage(e.data);
}
} else {
addDebugMsg('No Pi on network')
}
}
}
Функция addDebugMsg
- это просто функция, которую я сделал, чтобы показать на странице, когда найден PI.