チャットアプリのプログラミングしています。
pythonのtkinterで応答なしが発生してしまい
教えて頂きたいです。
前提
ここに質問の内容を詳しく書いてください。
(例)
プログラミング言語はpythonです。
1つのパソコンでアプリ間でチャットをしたいと思っています。
jupyterlabがクライアント
spyderがサーバーで
クライアントから数値をサーバーにソケット通信で
送ります。
サーバー側が入力数値からtkinterで数値の表示をします。
数値の入力がクライアントから無い状態があると
数値表示画面が応答なしになります。
after関数を使って数値表示しています。
マルチスレッドなど方法があると思います。
プログラミングが分からないので
ご教授お願いします。
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
python
サーバー側
import socket
import tkinter as tk
host1 = '127.0.0.1'#IPアドレスの設定
#"127.0.0.1"は"localhost"と同じ意味で扱われ、自分のPC内のみの通信となります。
port1 = 8769#ポートの設定
#オブジェクト作成
socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#AF_INET:IPv4指定 SOCK_STREAM:TCPプロトコル指定
socket1.bind((host1, port1))#ホスト名とポート番号を指定
socket1.listen(1)#リクエスト処理
print('クライアントからの入力待ち状態')
コネクションとアドレスを取得
connection, address = socket1.accept()
print('接続したクライアント情報:' + str(address))
無限ループ byeの入力でループを抜ける
recvline = ''
sendline = ''
#num = 0
counter = 0
#while True:#ループ
def recv_time(label):
def count():
global counter
# クライアントからデータを受信
recvline = connection.recv(4096).decode()#4096データ受信サイズ
#if recvline == 'bye': #受信データがbyeなら繰り返しを強制終了 #break try: #num = int(recvline)#受信データをs格納 counter = int(recvline) #print(counter) #if num % 2 == 0:#条件分岐:%2 偶数の時、余りが"0" sendline = '入力して下さい。'.encode('utf-8')#'OKです' #else:#奇数の時 #sendline = 'NGです'.encode('utf-8') connection.send(sendline) label.config(text=str(counter)) label.after(1000,count) except ValueError as e: # 送信用の文字を送信 #sendline = '数値を入力して下さい'.encode('utf-8')#UTF-8に変換して受信する #connection.send(sendline) #finally: #print('クライアントで入力された文字=' + str(recvline)) print(str(count)) count()
root=tk.Tk()
root.title("soket_count")
root.geometry("300x300")
label=tk.Label(root,width=3,font=("",30),bg="white",relief="groove",bd=1)
recv_time(label)
label.place(x=120,y=120)
root.mainloop()
クライアント側
import socket
import tkinter as tk
host1 = '127.0.0.1'#IPアドレスの設定
#"127.0.0.1"は"localhost"と同じ意味で扱われ、自分のPC内のみの通信となります。
port1 = 8769#ポートの設定
#オブジェクト作成
socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#AF_INET:IPv4指定 SOCK_STREAM:TCPプロトコル指定
socket1.bind((host1, port1))#ホスト名とポート番号を指定
socket1.listen(1)#リクエスト処理
print('クライアントからの入力待ち状態')
コネクションとアドレスを取得
connection, address = socket1.accept()
print('接続したクライアント情報:' + str(address))
無限ループ byeの入力でループを抜ける
recvline = ''
sendline = ''
#num = 0
counter = 0
#while True:#ループ
def recv_time(label):
def count():
global counter
# クライアントからデータを受信
recvline = connection.recv(4096).decode()#4096データ受信サイズ
#if recvline == 'bye': #受信データがbyeなら繰り返しを強制終了 #break try: #num = int(recvline)#受信データをs格納 counter = int(recvline) #print(counter) #if num % 2 == 0:#条件分岐:%2 偶数の時、余りが"0" sendline = '入力して下さい。'.encode('utf-8')#'OKです' #else:#奇数の時 #sendline = 'NGです'.encode('utf-8') connection.send(sendline) label.config(text=str(counter)) label.after(1000,count) except ValueError as e: # 送信用の文字を送信 #sendline = '数値を入力して下さい'.encode('utf-8')#UTF-8に変換して受信する #connection.send(sendline) #finally: #print('クライアントで入力された文字=' + str(recvline)) print(str(count)) count()
root=tk.Tk()
root.title("soket_count")
root.geometry("300x300")
label=tk.Label(root,width=3,font=("",30),bg="white",relief="groove",bd=1)
recv_time(label)
label.place(x=120,y=120)
root.mainloop()
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

あなたの回答
tips
プレビュー