2015-10-03 2 views
0

Я построил сетевую игру с блендер движок игры с сокетом UDP, у меня есть server.blend и client.blend. В моем доме, игра прекрасно работает и соединение так далее .. но когда я послал client.blend к другу, что он не может подключиться к серверу ..UDP- сервер и клиент IP для дальней связи для

Это мой сервер конструктор:

class Server: 

def __init__(self, host="", port= 9017): 

    self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    self.socket.setblocking(False) 
    self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
    self.socket.bind((host, port)) 

это конструктор моего клиента:

class Client: 

def __init__(self, server_ip="192.168.1.12", server_port= 9017): 

    self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    self.socket.setblocking(False) 

    self.serv_addr = (server_ip, server_port) 

Я считаю, что это не работает на компьютере моего друга из IP-адресов.

Кто-нибудь знает в чем проблема?

+0

Интернет является более сложным, чем это. Вероятно, вы за брандмауэром выполняете трансляцию адресов (NAT), которая блокирует входящие пакеты UDP. Вы не сможете напрямую связаться со своим внутренним IP-адресом. Для этого вам нужно будет создать специальное правило брандмауэра. – Keith

+0

Я понимаю ... скажу, что я хочу сделать это специальное правило брандмауэра .. это сложно? вы знаете, как это сделать? – Maor2871

+0

Это зависит от того, что у вас есть. Если вы используете Linux, вы можете найти несколько онлайн-тутуров (http://www.thegeekstuff.com/2011/02/iptables-add-rule/). Но вы, вероятно, не так, вам придется обратиться к руководству вашей модели. К сожалению, многие коммерческие модели не позволяют делать такие вещи. – Keith

ответ

0

жестко закодированный IP вы используете это RFC 1918 частных IP-адрес, который не является маршрутизируемым через Интернет. Если ваш друг подключен к той же локальной сети, к которой он, скорее всего, сможет подключиться к вашему серверу. По сути, это сводится к проблеме сети.

Возможных решений могут быть, чтобы определить имя хоста в вашем приложении и использовать поставщик DynDNS, чтобы зарегистрировать это имя хоста с помощью открытого IP маршрутизатора. Затем настройте переадресацию портов на домашнем маршрутизаторе, чтобы разрешить соединения из Интернета на ваш сервер на требуемых портах udp. Есть тысяча других способов сделать что-то подобное, но на самом деле это попадает в сферу сетей, а не в программирование.

+0

Спасибо! Как вы думаете, что это показано в этом видео: https://www.youtube.com/watch?v=ZzVpkat16-Y может работать? – Maor2871

 Смежные вопросы

  • Нет связанных вопросов^_^