質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Q&A

0回答

638閲覧

websocketの同じLANでのPC通信

kka_aoi

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

0グッド

0クリップ

投稿2022/09/08 07:46

編集2022/09/09 00:16

起こっていること

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)

プロキシに関してはあまり知識がなく設定しておりません初期状態のままです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2022/09/08 08:29

提示コードにてLAN内の別PCクライアントからサーバへの接続、動作できました。 試したことに書かれているようにクライアント→サーバへの接続ができていないとなれば LAN構成、プロキシやFWなどの有無、設定内容などネットワークに関する情報を提示したほうがよいと思います。
kka_aoi

2022/09/09 00:04

ご指摘ありがとうございます。修正させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問