如何解决Python套接字/SocketServer连接[Errno 10048]和[Errno 10049]?

2 投票
1 回答
4917 浏览
提问于 2025-04-17 00:12

我正在尝试制作一个在线第一人称射击游戏,目前它在我的本地网络上运行得很好。我的目标是让它能够在全球范围内运行。

我之前尝试过让其他Python项目在全球范围内运行,但到现在为止都没有成功。我从ipchicken或者其他地方获取我的IP地址,然后把它设置为服务器的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

首先,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连接,对于一个第一人称射击游戏,你可能想考虑使用UDP,这样丢包就不会对性能造成太大影响……祝你好运

撰写回答