Как устранить соединение Python Sockets/SocketServer [Errno 10048] и [Errno 10049]?

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

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

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

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

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

где хост — это строка, представляющая либо имя хоста в нотации интернет-домена, например '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, все остальное дает ту же ошибку, что и раньше.

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


person H4rtland    schedule 23.08.2011    source источник
comment
Причина, по которой вы получаете другую ошибку для порта 80, заключается в том, что что-то (предположительно, ваш веб-сервер) уже использует его. Что вы подразумеваете под получением моего IP-адреса от ipchicken или чего-то еще?   -  person ghostJago    schedule 23.08.2011
comment
Попробуйте использовать «localhost» в качестве адреса. Это работает?   -  person 9000    schedule 24.08.2011


Ответы (1)


Во-первых, порт 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, чтобы отброшенные пакеты не сильно влияли на производительность... Удачи

person sampwing    schedule 25.08.2011
comment
любой номер порта под портом 1024 является привилегированным не ниже 5000 - person cobie; 28.05.2013