#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] Отказано в подключении.