Как да разрешите 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:

където 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, всичко друго ми дава същата грешка като преди.

Ако някой може да хвърли малко светлина по тази тема за мен, ще бъда много благодарен.


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