Связь с разными сетями

#python #networking #udp

#python #сеть #udp

Вопрос:

Я хотел бы создать игру с python и PyGame, в которой два игрока играют через Wi-Fi в разных сетях сетей. В настоящее время у меня есть этот код (который я получил из видео).

 # SERVER

import socket

def Main():
    host = '127.0.0.1'
    port = 5000

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host,port))


    print("Server Started.")
    while True:
        data, addr = s.recvfrom(1024)
        data = data.decode('utf-8')
        print("message From: "   str(addr))
        print("from connected user: "   data)
        data = data.upper()
        print("sending: "   data)
        s.sendto(data.encode('utf-8'), addr)
    c.close()

if __name__ == '__main__':
    Main()

# CLIENT

import socket

def Main():
    host = '127.0.0.1'
    port = 5001

    server = ('127.0.0.1',5000)

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host, port))

    message = raw_input("-> ")
    while message != 'q':
        s.sendto(message.encode('utf-8'), server)
        data, addr = s.recvfrom(1024)
        data = data.decode('utf-8')
        print('Received from server: '   data)
        message = raw_input("-> ")
    s.close()

if __name__ == '__main__':
    Main()
  

Это отлично работает на одном компьютере. Как я мог бы заставить это работать на двух разных компьютерах (в двух разных локальных сетях)?

Комментарии:

1. Вам нужно будет подключиться к фактическим IP-адресам вместо адреса обратной связи. Если две сети могут взаимодействовать, то это должно сработать.

2. @RonMaupin, разве ему это тоже не нужно port-forward ?

3. @coder, это зависит. В вопросе о NAT ничего нет. Существует много, много сетей, которые не используют NAT.

4. @RonMaupin, да, но из его code( socket.AF_INET ) кажется, что он говорит об ipv4 , возможно ли, чтобы ipv4 не использовал NAT?

5. Да, можно использовать IPv4 без NAT. Я не понимаю, почему кто-то думает иначе. IPv4 был в производстве за много лет до того, как был предложен NAT. NAT — это клудж, предназначенный для расширения ограниченного адресного пространства IPv4, пока IPv6 не станет повсеместным. Если вы внимательно прочитали мой комментарий, я написал: » Если две сети могут взаимодействовать …»

Ответ №1:

изменить на host= '0.0.0.0' (для сервера)

это позволяет публиковать его в любом доступном интерфейсе… если у вас есть маршрутизатор, вам (вероятно) также потребуется использовать настройки переадресации портов вашего маршрутизатора для направления трафика на нужный компьютер

в качестве отступления … что это за бред? server = ('127.0.0.1',5000)

для клиента … просто установите общедоступный IP-адрес вашей сети с соответствующим портом (если вы используете защиту портов)… вы можете найти этот IP-адрес @ http://whatismyip.com

Комментарии:

1. Когда я меняю сервер на свой общедоступный IP-адрес, ничего не происходит, если я пытаюсь отправить данные. Если я попробую то же самое на другом устройстве (все еще в той же сети), я получаю: socket.error: [Ошибка 111] Отказано в подключении.