TCP-сервер на Raspberry Pi не подключается к TCP-клиенту Android на Raspberry Pi

Я создаю TCP-сервер на Raspberry Pi, чтобы я мог управлять им со своего телефона Android через WIFI. Я подключил и пи, и телефон к моему WIFI-маршрутизатору.

import socket
from cookieLED_FINAL import callLED

host = '192.168.100.100'
port = 5560

def setupServer():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print("Socket created.")
    try:
        s.bind((host, port))
    except socket.error as msg:
        print(msg)
    print("Socket bind complete.")
    return s

def setupConnection():
    s.listen(1) # Allows one connection at a time.
    conn, address = s.accept()
    print("Connected to: " + address[0] + ":" + str(address[1]))
    return conn

def storeFile(filePath):
    picFile = open(filePath, 'wb')
    print("Opened the file.")
    pic = conn.recv(1024)
    while pic:
        print("Receiving picture still.")
        picFile.write(pic)
        pic = conn.recv(1024)
    picFile.close()

def dataTransfer(conn):
    # A big loop that sends/receives data until told not to.
    while True:
        # Receive the data
        data = conn.recv(1024) # receive the data
        data = data.decode('utf-8')
        # Split the data such that you separate the command
        # from the rest of the data.
        dataMessage = data.split(' ', 1)
        command = dataMessage[0]
        if command == 'GET':
            reply = GET()
        elif command == 'REPEAT':
            reply = REPEAT(dataMessage)
        elif command == 'STORE':
            print("Store command received. Time to save a picture")
            storeFile(dataMessage[1])
            print("FINISHED STORING FILE")
            break
        elif command == 'LED_ON':
            callLED()
            reply = 'LED was on'
        elif command == 'EXIT':
            print("Our client has left us :(")
            break
        elif command == 'KILL':
            print("Our server is shutting down.")
            s.close()
            break
        else:
            reply = 'Unknown Command'
        # Send the reply back to the client
        conn.sendall(str.encode(reply))
        print("Data has been sent!")
    conn.close()


s = setupServer()

while True:
    try:
        conn = setupConnection()
        dataTransfer(conn)
    except:
        break

При использовании ИП:

192.168.100.100 :

[Errno 99] Невозможно назначить запрошенный адрес

127.162.100.100 или 0.0.0.0: сокет создается, но клиент Android не подключается.

На моем телефоне Android я использую приложение под названием TCP/UDP Test Tool, которое я скачал из игрового магазина.

Я новичок в Linux, а также в Raspberry Pi 3 B+.

ОС: РАСПИАН

ЯЗЫК ПРОГРАММИРОВАНИЯ: PYTHON 3.5


person Neil    schedule 11.06.2018    source источник
comment
Как вы указали, хост должен быть 0.0.0.0. 127.0.0.1 — это loopback-адрес, он же localhost, который указывает на сам компьютер (может сработать).   -  person Aimery    schedule 11.06.2018
comment
Какое сообщение об ошибке вы получаете (на вашем телефоне или на Pi, если он обнаруживает попытку подключения)? Кроме того, проверили ли вы свои политики брандмауэра (sudo iptables -L)? Это может помешать вашему Pi принимать входящие соединения.   -  person Aimery    schedule 11.06.2018
comment
Нет, я не проверял политики брандмауэра, так как я новичок в Linux, поэтому я мало что знаю об этом. Если вы можете отправить мне ссылку или что-нибудь о проверке брандмауэра на raspbian, а затем изменить его, это было бы очень полезно. И спасибо, Эймери.   -  person Neil    schedule 11.06.2018
comment
Для ознакомления с iptables (из документа Ubuntu, но это также относится и к Raspbian): help.ubuntu.com /сообщество/IptablesHowTo   -  person Aimery    schedule 11.06.2018
comment
Я попробовал команду sudo iptables -A INPUT -p tcp --dport 5560 -j ACCEPT. Но не повезло. Программа по-прежнему выдает ошибку [Errno 99] Не удается назначить запрошенный адрес. Не могли бы вы сказать мне способ, чтобы я мог подключить свой телефон Android к IP-адресу 192.168.100.100:5560 в специфический.   -  person Neil    schedule 12.06.2018
comment
Можете ли вы отредактировать свой вопрос, включив в него новую ошибку Errno 99 и где именно она возникает (номер строки, клиентская или серверная программа и т. д.)?   -  person Aimery    schedule 12.06.2018
comment
Ошибка возникает в строке № 9 s.bind((хост, порт)), на стороне сервера @Aimery   -  person Neil    schedule 12.06.2018
comment
У вас все еще есть ошибка при использовании host = '0.0.0.0'? Вы пытались подключиться к Pi (к другому сервису, например, ssh) с телефона?   -  person Aimery    schedule 12.06.2018


Ответы (1)


Загрузите программное обеспечение под названием Advanced IP Scanner.

Подключите все устройства к одной сети, т.е. к точке доступа.

На Raspberry Pi откройте терминал и введите ifconfig, чтобы получить ipv4, а не 0.0.0.0 или 127.0.0.1, другой.

Например, если IP-адрес показывает 192.168.100.144, введите 192.168.100.1-255 в Advanced IP Scanner в Windows, чтобы начать сканирование и найти IP-адреса, на которых написано имя вашего Raspberry Pi. Теперь введите эти ips в tcp-клиент и подключитесь.

person Sayok Majumder    schedule 15.11.2018