起こっていること
ubuntuでwebsocketを使おうと思いpythonでサーバーを作成してlocalhostでは接続できるのですが同じLANに接続している他のPCでは接続できませんでした。
初心者でいたらぬところがありますがよろしくおねがいします。
ubutnu 20.4LTS
python3 3.8.10
実現したいこと
- 同じLAN内の別PCでのwebsocketの通信
該当のソースコード
プログラムはほぼコピペになっています参考元は下記にはらせていただきます。
サーバー側
python
1 2from websocket_server import WebsocketServer 3import logging 4 5class Websocket_Server(): 6 7 def __init__(self,port,host): 8 self.server = WebsocketServer(port=port, host=host, loglevel=logging.INFO) 9 print("a") 10 11 # クライアント接続時に呼ばれる関数 12 def new_client(self, client, server): 13 print("new client connected and was given id {}".format(client['id'])) 14 # 全クライアントにメッセージを送信 15 self.server.send_message_to_all("hey all, a new client has joined us") 16 17 # クライアント切断時に呼ばれる関数 18 def client_left(self, client, server): 19 print("client({}) disconnected".format(client['id'])) 20 21 # クライアントからメッセージを受信したときに呼ばれる関数 22 def message_received(self, client, server, message): 23 print("client({}) said: {}".format(client['id'], message)) 24 # 全クライアントにメッセージを送信 25 self.server.send_message_to_all(message) 26 27 # サーバーを起動する 28 def run(self): 29 # クライアント接続時のコールバック関数にself.new_client関数をセット 30 self.server.set_fn_new_client(self.new_client) 31 # クライアント切断時のコールバック関数にself.client_left関数をセット 32 self.server.set_fn_client_left(self.client_left) 33 # メッセージ受信時のコールバック関数にself.message_received関数をセット 34 self.server.set_fn_message_received(self.message_received) 35 self.server.run_forever() 36 37IP_ADDR = "0.0.0.0" # IPアドレスを指定 38PORT= 8080 # ポートを指定 39ws_server = Websocket_Server(PORT,IP_ADDR) 40ws_server.run() 41
クライアント側
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JavaScriptでソケット通信(WebSocket)する方法</title> </head> <body> <h1>JavaScriptでWebSocket</h1> <label>WebSocket通信を【wss://echo.websocket.org】と行います。</label><br> <input type="button" value="コネクション開始" onclick="open_cnn()"><br> <br> <input type="text" id="SndMsg" placeholder="送信メッセージを入力"><br> <input type="button" value="上記メッセージを送信" onclick="snd_msg()"><br> <br> <textarea id="RcvMsg" cols="40" rows="4" maxlength="20" placeholder="送信と同時に同じ内容が、受信メッセージとして反映されます。"></textarea><br> <input type="button" value="コネクション終了" onclick="close_cnn()"><br> <br> <script type="text/javascript"> var connection = ""; //コネクション開始ボタン function open_cnn(){ console.log("コネクションを開始しします。"); connection = new WebSocket('ws://10.1.5.71:8080'); //コネクションが接続された時の動き connection.onopen = function(e) { console.log("コネクションを開始しました。"); }; //エラーが発生したされた時の動き connection.onerror = function(error) { console.log("エラーが発生しました。"); }; //メッセージを受け取ったされた時の動き connection.onmessage = function(e) { let msg = "メッセージを受信しました。" + e.data; document.getElementById("RcvMsg").value = msg; }; //通信が切断された時の動き connection.onclose = function() { console.log("コネクションを終了しました。"); }; } //メッセージ送信ボタン function snd_msg(){ connection.send(document.getElementById("SndMsg").value); } //コネクション終了ボタン function close_cnn(){ connection.close(); } </script> </body> </html>
試したこと
$nc -v -w 1 10.1.5.71 -z 8080
上記のコマンドを使いアクセスできるか確認したところサーバー側ではアクセスができたがクライアントではアクセスできなかった。
補足情報(ソースコードの参考場所)
追記(FW,プロキシ)
開放中のファイアーウォールです。
$sudo ufw status 状態: アクティブ To Action From -- ------ ---- 80/tcp ALLOW Anywhere 80,443/tcp ALLOW Anywhere 80 ALLOW Anywhere 443/tcp ALLOW Anywhere Apache ALLOW Anywhere 443 ALLOW Anywhere Apache Full ALLOW Anywhere 22 ALLOW Anywhere 5555 ALLOW Anywhere 8080 ALLOW Anywhere 80/tcp (v6) ALLOW Anywhere (v6) 80,443/tcp (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6) 443/tcp (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6) 22 (v6) ALLOW Anywhere (v6) 5555 (v6) ALLOW Anywhere (v6) 8080 (v6) ALLOW Anywhere (v6)
プロキシに関してはあまり知識がなく設定しておりません初期状態のままです。