【问题标题】:How to solve Python Sockets/SocketServer Connection [Errno 10048] & [Errno 10049]?如何解决 Python Sockets/SocketServer Connection [Errno 10048] & [Errno 10049]?
【发布时间】:2011-11-02 00:50:40
【问题描述】:

我正在尝试制作一款在线 FPS 游戏,目前它可以在我的本地网络上运行。我想做的是让它在全球范围内发挥作用

我过去曾尝试让其他 Python 项目在全球范围内运行,但到目前为止我还无法让它运行。我从 ipchicken 或其他任何地方获取我的 IP,并将其作为服务器的主机,但是当我尝试启动它时,我得到了这个。

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

我尝试了许多不同版本的 IP 地址,这些版本可能是从不同地方找到的我的 IP 地址,但它们都给出了该输出。

我想,既然我有自己的网络空间,我可以尝试按照 Python 手册中所说的去做:

其中 host 是一个字符串,表示 Internet 域表示法中的主机名,例如 '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 上,但其他任何东西都会给我和以前一样的错误。

如果有人能帮我解释一下这个问题,我将不胜感激。

【问题讨论】:

  • 端口 80 出现不同错误的原因是某些东西(可能是您的 Web 服务器)已经在使用它。 “从 ipchicken 或其他什么获取我的 IP”是什么意思?
  • 尝试使用 'localhost' 作为您的地址。有用吗?

标签: python sockets ip ip-address connect


【解决方案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,这样丢弃的数据包不会严重影响性能......祝你好运

【讨论】:

  • 端口 1024 下的任何端口号的特权不低于 5000
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2019-07-08
  • 2016-06-21
  • 2019-10-06
相关资源
最近更新 更多