我使用Python的asyncio和websockets模块创建了一个websocket。此服务器在同一台计算机中正常工作。这是服务器的实际代码:
import sys
import os
import asyncio
import websockets
@asyncio.coroutine
def receive(websocket, path):
data = yield from websocket.recv()
print('< {}'.format(data))
output = 'Sent data from server: {}'.format(data)
yield from websocket.send(output)
print('> {}'.format(output))
start_server = websockets.serve(receive, '127.0.0.1', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()它正常运行,来自同一台机器上的客户端的连接没有任何问题地连接到它。
但是当我试图从局域网上的客户端访问它时,它会生成一个ConnectionRefusedError。这是客户端代码:
import asyncio
import websockets
@asyncio.coroutine
def hello():
websocket = yield from websockets.connect(
'ws://192.168.0.26:8765')
try:
name = input("What's your name? ")
yield from websocket.send(name)
print("> {}".format(name))
greeting = yield from websocket.recv()
print("< {}".format(greeting))
finally:
yield from websocket.close()
asyncio.get_event_loop().run_until_complete(hello())我在Raspbian上安装了ufw,以便使用以下命令启用端口8765:
ufw allow 8765但不起作用。在Windows机器上,命令
nmap -p 8765 192.168.0.26生成此结果:
PORT STATE SERVICE
8765/tcp closed ultraseek-http还有..。命令
ufw status有人能给出一些建议来解决客户端和服务器之间的通信问题吗?
发布于 2018-10-22 16:06:48
这里有一个问题:
start_server = websockets.serve(receive, '127.0.0.1', 8765)您只在127.0.0.1上告诉websockets给听,因此只能接收来自本地主机的连接,并且只能在遗留的IPv4上接收连接。本地主机IPv6连接(默认)和来自其他计算机的所有连接都将接收连接拒绝的错误。
如果希望从本地机器外部接收连接,则应将Host设置为None或空字符串。这将接受来自任何地方的连接,无论是在IPv6还是IPv4上,当然都要遵守任何防火墙规则。
start_server = websockets.serve(receive, None, 8765)主机和端口直接传递给asyncio.create_server(),后者将主机记录为:
https://stackoverflow.com/questions/52933369
复制相似问题