我有一两年就有了 python websockets,我通常有两个客户端连接,一个使用 C#,一个使用 python。
我最近开始开发 Web 客户端并尝试使用 JS Websocket,但它抛出了一个错误:
Firefox can’t establish a connection to the server at wss://*url removed for privacy*/.
与 Chrome 相同:
WebSocket connection to 'wss://*url removed for privacy*/' failed
这就是我的服务器端:
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_cert = "*path to cert*"
ssl_key = "*path to key*"
ssl_context.load_cert_chain(ssl_cert, keyfile=ssl_key)
async def main():
async with websockets.serve(echo, "0.0.0.0", 465, ssl=ssl_context):
print(f'Listening on port 465')
await asyncio.Future()
如果需要的话我可以分享回显功能
这是我用于连接的Python代码:
async with websockets.connect("wss://*URL removed for privacy*") as websocket:
await websocket.send('*data sent*')
response = await websocket.recv()
工作正常
在我的 C# 客户端上:
wsc = new WebsocketClient('wss://*URL Removed for privacy*');
wsc.ReconnectTimeout = TimeSpan.FromSeconds(15);
wsc.ReconnectionHappened.Subscribe(info => Console.WriteLine($"Reconnection happened, type: {info.Type}"));
await wsc.Start();
工作正常
还有 JS 客户端:
const socket = new WebSocket("wss://*URL Removed for privacy*");
socket.addEventListener("open", (event) => {
socket.send("*data sent*");
});
抛出错误
我什至不知道为什么它无法连接,因为没有有关连接尝试的详细信息。
感谢您的帮助
我最近花了一些时间在干净的 Debian 安装上尝试一些东西,并找出导致问题的原因。
端口 TCP/465 用于基于 TLS 的 SMTP。我尝试反转到 WSS 的默认 TCP/443 端口,它有效。
我也尝试了不同的端口并得到了不同的结果。 无论端口是否标准化似乎都没有什么区别,我让它与一些标准化端口一起工作。
但是,除了 TCP/443 之外,我无法让任何用于 TLS 的端口与 WSS 配合使用(尝试过 993、995、465、563),所以我假设默认情况下使用 JS Websocket 客户端无法连接任何 TLS 相关端口,也许出于安全原因。
TL;DR:在端口 465 上连接不起作用,但默认端口(443)或备用端口(4443)工作得很好