ZernovTechno / AR

Unity project - my AR app for android phone. Includes hand tracking and stereo vision.
https://www.youtube.com/@zernovtech
GNU General Public License v2.0
41 stars 6 forks source link

Как вам такая идея? #3

Open lp85d opened 3 months ago

lp85d commented 3 months ago

Для реализации программы, которая сканирует сеть на наличие устройства с приложением launcher-release.apk, и при этом не генерирует QR-код, можно воспользоваться протоколом UDP или TCP для обнаружения устройств. Предположим, что ваше приложение запускается на Android и имеет возможность отвечать на запросы. При этом программа будет отправлять запрос, а затем ждать ответ от устройств в сети.

Ниже приведен пример: import socket import numpy as np import cv2 import base64 import pyautogui

Функция для сканирования сети

def scan_network(port, timeout=1): ip_prefix = '.'.join(socket.gethostbyname(socket.gethostname()).split('.')[:-1]) + '.' devices = []

for i in range(1, 255):
    ip = f"{ip_prefix}{i}"
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.settimeout(timeout)
    try:
        # Отправка запроса на обнаружение
        sock.sendto(b'PING', (ip, port))
        response, addr = sock.recvfrom(1024)
        if response == b'PONG':  # Ожидаем, что устройство вернет 'PONG'
            devices.append(addr[0])
    except socket.timeout:
        continue
    finally:
        sock.close()

return devices

def main(): port = 12345 # Порт, на который будете отправлять запросы devices = scan_network(port)

if devices:
    print("Найденные устройства:", devices)
    # Здесь можно добавить логику для подключения к найденным устройствам
    for device in devices:
        # Пример отправки скриншота
        retval, buffer = cv2.imencode('.jpg', cv2.resize(cv2.cvtColor(np.array(pyautogui.screenshot()), cv2.COLOR_RGB2BGR), (1920, 1080)), [int(cv2.IMWRITE_JPEG_QUALITY), 90])
        connection_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        connection_socket.connect((device, port))
        connection_socket.send(base64.b64encode(buffer))
        connection_socket.close()
else:
    print("Устройства не найдены.")

if name == "main": main()