我在本地写好了python websocket服务端的代码,上传到云服务器后把代码中创建websocket时的ip地址改为了公网ip,但是却运行不了,就像下面这样

我的想法就是在云服务器上创建一个 websocket服务,然后在本地连接这个websocket,请问该怎么做?
我已经根据大家的意见配置好了防火墙规则,如下图:

我把websocket服务器端的ip地址改为了云服务器的内网地址就可以正常运行

但是设置为公网ip的时候就会报以下错误:

我能确保公网ip是正确无误的
我在本地写好了python websocket服务端的代码,上传到云服务器后把代码中创建websocket时的ip地址改为了公网ip,但是却运行不了,就像下面这样

我的想法就是在云服务器上创建一个 websocket服务,然后在本地连接这个websocket,请问该怎么做?
我已经根据大家的意见配置好了防火墙规则,如下图:

我把websocket服务器端的ip地址改为了云服务器的内网地址就可以正常运行

但是设置为公网ip的时候就会报以下错误:

我能确保公网ip是正确无误的
参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。
要实现你的目标,你需要确保几个关键点:首先,确保云服务器上的防火墙设置允许从外部访问8000端口。其次,你需要确保你的云服务器有一个固定的IP地址,并且这个IP地址可以从互联网访问。最后,你的代码可能还需要进行一些调整,以便正确地处理异步操作。
这里是一个简化版的WebSocket服务器代码示例,用于在云服务器上启动WebSocket服务:
import asyncio
import websockets
async def handler(websocket, path):
async for message in websocket:
print(f"Received: {message}")
await websocket.send("Echo: " + message)
def main():
loop = asyncio.get_event_loop()
try:
# 使用你的云服务器公网IP替换这里的 'your_server_ip'
server = websockets.serve(handler, 'your_server_ip', 8000)
print("WebSocket server started on port 8000")
loop.run_until_complete(server)
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
print("Closing server...")
server.close()
loop.run_until_complete(server.wait_closed())
print("Server closed.")
loop.close()
if __name__ == "__main__":
main()
要测试这个WebSocket服务器,你需要一个WebSocket客户端,例如可以使用浏览器插件(如WebSocket Client for Chrome)或者编写一个简单的Python客户端。这里是Python客户端的例子:
import asyncio
import websockets
async def client_task():
uri = f"ws://{your_server_ip}:8000"
async with websockets.connect(uri) as websocket:
await websocket.send("Hello, WebSocket!")
response = await websocket.recv()
print(f"Received: {response}")
asyncio.run(client_task())
请将 'your_server_ip' 替换为你的云服务器的实际公网IP。确保云服务器的防火墙配置允许来自外网的8000端口流量,并且网络策略允许此连接。如果一切正常,你应该能在服务器端看到接收到的消息,并且在客户端看到消息的回显。
如果你遇到任何网络连接问题,建议检查云服务器的网络设置、防火墙规则以及云服务商是否限制了某些端口的访问。如果问题依然存在,可能需要更深入的网络诊断,这可能涉及到NAT穿透、端口转发等高级网络知识。