

PythonでWebSocketサーバーを動かしているのですが、クライアントとの接続の確立がうまくいきません。

クライアント(Google Chrome)からWebSocketで受け取ったデータをノンブロッキングなUDPを使って他のアドレスへ転送したいです。

ただ、WebSocketのサーバーとクライアント間の接続がうまくいっていないようで、Chromeを見ると

[code]

    WebSocket connection to wss://localhost:4246/ failed: Error in connection establishment: net::ERR_SOCKET_NOT_CONNECTED
    
[/code]

というエラーが発生しています。

なぜ、接続がうまくいかないのでしょうか?

サーバーは下記のようになっていて、データを受信するとhandleMessageが呼ばれてデータの内容がprintで表示された後、udpで送るようになっています。

Chromeは`-allow-insecure-localhost`が有効になっています。

このコードは[simple-websocket-server](https://github.com/dpallot/simple-websocket-
server)  
を使っています。

[code]

    from SimpleWebSocketServer import WebSocket, SimpleSSLWebSocketServer, SimpleWebSocketServer
    import multiprocessing
    
    import ssl
    import signal
    import sys
    import socket
    import os.path
    
    
    
    class DataWebSocket(WebSocket):
        def __init__(self, server, sock, address, tcp_sock):
            super().__init__(server, sock, address)
            self.udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            self.udp_sock.setblocking(False)
            self.udp_sock.bind(("127.0.0.1", 6666))
        def handleMessage(self):
            while True:
                    self.udp_sock.sendto(("127.0.0.1", 7774), self.data)
            print(self.data)
    
        def handleClose(self):
            print("connection: closed " + self.address)
            self.conn_sock.close()
            self.sendMessage("server exit")
            sys.exit()
    
        def handleConnected(self):
            pass
    
    def f():
        def datawebsocketclasscaller(server, sock, address):
            return DataWebSocket(server, sock, address)
        return datasocketclasscaller
    
    def start_data_receiver():
        SSL = True
        p = f()
        if SSL:
            server = SimpleSSLWebSocketServer("127.0.0.1", 4246, p, "../certs/server.crt", "../certs/server.key")
        else:
            server = SimpleWebSocketServer("127.0.0.1", 4246, p)
        server.serveforever()
    
[/code]

クライアント(Google Chrome):

[code]

    const ws = new WebSocket("wss://localhost:4246");
    const btn = document.querySelectorAll("button#btn1")[0];
    btn.onclick = () => ws.send("Hello from button1");
    
[/code]


CC BY-SA 4.0
2019-01-24T13:21:01.683
52293
2019-01-24T15:05:29.153
2019-01-24T15:05:29.153
5246
5246
question
python javascript python3 websocket udp
PythonでWebSocketサーバーへの接続が失敗する