前提・実現したいこと
ソケット通信により外部から取得した値をHTML上で表示させたいのですが以下のエラーが表示され、ローカルサーバのブラウザ上で表示させることができません。
発生している問題・エラーメッセージ
該当のソースコード
Python
1from flask import * # 必要なライブラリのインポート 2 3 4comand = "あいうえお" 5 6app = Flask(__name__) # アプリの設定 7 8 9@app.route("/") # どのページで実行する関数か設定 10def index(): 11 12 return render_template('index.html', comand=response) 13 14 15 16if __name__ == "__main__": # 実行されたら 17 app.run(debug=False, host='localhost', port=9999) # debug=False でRestartingを無効にする、host="'0'0'0'0"ではなくローカルホストにすること
Python
1import logging 2import socket 3import webbrowser 4 5webbrowser.open_new('https://docs.python.org/ja/3/library/index.html') # ブラウザーに接続 6 7logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s') 8host_ip = '192.168.24.204' # PLCのIPアドレス 9host_port = 8501 # 上位リンク通信のポート番号(デフォルト値) 10 11logging.debug('start') 12client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 13# socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 14 15try: 16 #クライアント接続 17 client.connect((host_ip,host_port)) # サーバーに接続(kv-7500にTCP接続/上位リンク通信) 18except: 19 print("PLC接続NG") 20 21 22 23 24 25comand = "RD DM1016.D\r" # 上位リンク通信のコマンド(データ読み出しコマンド、左から順に、読み出しコード、IOの番号、?。 26 # DM1016:生産数日 27 28#comand = "RDS DM53000.D 2\r" # 上位リンク通信のコマンド(データ連続読み出しコマンド) 29 30 31 #[.D]⇒±10進数32BIT表示・・・返り値は10桁の0埋め数値 32 33client.send(comand.encode("ascii")) # 上位リンク通信のデータコードがASCIIなのでエンコード 34 # ASCII:文字コード 35 # comand を ASCII にエンコード 36 # エンコード:他の形式に変換すること 37print("send : " + comand) 38 39response = client.recv(64) # 受信用バイト配列を定義しておく 40response = response.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード 41 # UTF-8: 文字コード ASCIIよりデータサイズが小さい 42 # デコード:エンコードされたものをもとの形式に戻すこと 43 44client.close() 45 46print("Received :" ,response) 47logging.debug('end')
Python
1from flask import * # 必要なライブラリのインポート 2import logging 3import socket 4import webbrowser 5 6 # webbrowser.open_new('https://docs.python.org/ja/3/library/index.html') # ブラウザーに接続 7 8logging.basicConfig(level=logging.DEBUG, format='%(threadName)s: %(message)s') 9host_ip = '192.168.24.204' # PLCのIPアドレス 10host_port = 8501 # 上位リンク通信のポート番号(デフォルト値) 11 12logging.debug('start') 13client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 14# socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 15 16try: 17 #クライアント接続 18 client.connect((host_ip,host_port)) # サーバーに接続(kv-7500にTCP接続/上位リンク通信) 19except: 20 print("PLC接続NG") 21 22 23 24 25 26comand = "RD DM1016.D\r" # 上位リンク通信のコマンド(データ読み出しコマンド、左から順に、読み出しコード、IOの番号、?。 27 # DM1016:生産数日 28 29#comand = "RDS DM53000.D 2\r" # 上位リンク通信のコマンド(データ連続読み出しコマンド) 30 31 32 #[.D]⇒±10進数32BIT表示・・・返り値は10桁の0埋め数値 33 34client.send(comand.encode("ascii")) # 上位リンク通信のデータコードがASCIIなのでエンコード 35 # ASCII:文字コード 36 # comand を ASCII にエンコード 37 # エンコード:他の形式に変換すること 38print("send : " + comand) 39 40response = client.recv(64) # 受信用バイト配列を定義しておく 41response = response.decode("UTF-8") # PLCからの返答がbyteデータなのでUTF-8にデコード 42 # UTF-8: 文字コード ASCIIよりデータサイズが小さい 43 # デコード:エンコードされたものをもとの形式に戻すこと 44 45client.close() 46 47print("Received :" ,response) 48logging.debug('end') 49 50 51 52app = Flask(__name__) # アプリの設定 53 54 55@app.route("/") # どのページで実行する関数か設定 56 57def index(): 58 return render_template("index.html", command=response) # Hello, World! を出力 59 60 61 62if __name__ == "__main__": # 実行されたら 63 app.run(debug=False, host='localhost', port=9999) # debug=False でRestartingを無効にする、host="'0'0'0'0"ではなくローカルホストにすること
HTML
1<!doctype html> 2 3<html lang="ja"> 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 7 <title>{{ comand }}</title> 8 </head> 9 <body> 10 <h1>生産数{{ comand }}</h1> 11 </body> 12</html>
試したこと
上記のソケット通信のコードをもう一つのPythonのコードに組み込み、comandという変数をそろえて実行しましたが同様のエラーが発生いたします。
数日前にも同様の質問をしましたが解決できませんでした。
comand という変数が数値を受け取るものではなく、コマンド入れているだけだったので、index()内のcomand という部分をresponse に変えてみましたが、以前表示されません。
具体的なエラーの流れは
デバック
↓
コマンドプロンプロ上に「 Running on http://localhost:9999/ 」と表示されます (画像2)
↓
実際に http://localhost:9999/ に飛ぶ
↓
例外がスローされましたと表示される (画像1)
↓
ブラウザは読み込み中のまま (画像3)
回答1件
あなたの回答
tips
プレビュー