Как решить Python Sockets / SocketServer Connection [Errno 10048] и [Errno 10049]? - PullRequest
2 голосов
/ 23 августа 2011

Я пытаюсь сделать онлайн игру FPS, и пока она работает в моей локальной сети.Я пытаюсь заставить его работать глобально

В прошлом я пытался заставить другие проекты Python работать глобально, но до сих пор не смог заставить его работать.Я получаю свой IP от ipchicken или чего-то еще и помещаю его в качестве HOST для сервера, но когда я пытаюсь запустить его, я получаю это.

socket.error: [Errno 10049] The requested address is not valid in its context

Я пробовал много разных версий того, что может быть моимIP-адрес найден в разных местах, но все они дают такой вывод.

Я подумал, что, поскольку у меня есть свое веб-пространство, я мог бы попытаться сделать то, что, как он говорит, вы можете сделать в руководстве по Python:

где host - это строка, представляющая либо имя хоста в нотации интернет-домена, например 'daring.cwi.nl'

Итак, я поместил в домен моего веб-пространства (h4rtland.p3dp.com)и я получаю эту ошибку:

socket.error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted

Хотя только на порту 80, все остальное дает мне ту же ошибку, что и раньше.

Если кто-нибудь сможет пролить свет на эту тему для меня, это будетс благодарностью.

1 Ответ

2 голосов
/ 26 августа 2011

Во-первых, порт 80 обычно является http-трафиком. Все, что находится под портом 5000, является привилегированным, что означает, что вы действительно не хотите назначать свой сервер этому порту, если вы абсолютно не знаете, что делаете ... Ниже приведен простой способ настроить сокет сервера для принять слушать ...

import socket
host = None #will determine your available interfaces and assign this dynamically
port = 5001 #just choose a number > 5000
for socket_information in socket.getaddrinfo(host, port, socket.AF_INET, socket.SOCK_STREAM):
    (family, type, prototype, name, socket_address) = socket_information
sock = socket.socket(family, type, prototype)
sock.bind(socket_address)
max_clients = 1
sock.listen(max_clients)
connection, address = sock.accept()
print 'Client has connected:', address
connection.send('Goodbye!')
connection.close()

Это TCP-соединение, для игры FPS, которую вы, вероятно, захотите использовать с использованием UDP, чтобы отброшенные пакеты не сильно влияли на производительность ... Goodluck

...