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

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

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

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

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

982閲覧

Python3でEntryにIPアドレスを入力しget()で取得してconnectする方法

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

ソケット

TCP/IPにおいて、IPアドレスとサブアドレスであるポート番号を組み合わせたネットワークアドレスのことを呼びます。また、ソフトウェアアプリケーションにおいて、TCP/IP通信を行う為の仮想的なインターフェースという意味もある。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/10/01 18:43

編集2019/10/01 18:44

前提・実現したいこと

pythonを使ってソケット通信のGUIチャットソフトを簡易的に作成しています。
別のシェルで「server.py」を起動し接続待ち状態で待機し、そこに「chat_client.py」から接続要求を送り接続するところまで行きたいう段階です。名前の送受信はまだ行えていないので無視してください。
よろしくお願いします。

発生している問題・エラーメッセージ

Python

1エラーメッセージ``` 2Exception in Tkinter callback 3Traceback (most recent call last): 4 File "/Users/名前/anaconda3/lib/python3.7/tkinter/__init__.py", line 1705, in __call__ 5 return self.func(*args) 6 File "chat_client.py", line 12, in change_display 7 yhost = whost.get() 8 File "/Users/名前/anaconda3/lib/python3.7/tkinter/__init__.py", line 2682, in get 9 return self.tk.call(self._w, 'get') 10_tkinter.TclError: invalid command name ".!entry2"

該当のソースコード

Python

1# -*- coding: <encoding name> -*- 2 3import tkinter 4import socket 5import sys 6 7 8def first_gui(): 9 def change_display(): 10 frm.destroy() 11 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 12 yhost = whost.get() 13 yname = wname.get() 14 if not yhost: 15 yhost = "localhost" 16 else: 17 yhost = whost.get() 18 19 try: 20 client.connect((yhost, port)) 21 except: 22 finish() 23 24 second_gui() 25 26 def finish(): 27 sys.exit() 28 29 frm = tkinter.Tk() 30 frm.geometry('450x120') 31 frm.title('chat_start') 32 33 name = tkinter.Label(frm, text="名前") 34 wname = tkinter.Entry() 35 host = tkinter.Label(frm, text="接続先(IPアドレス)") 36 whost = tkinter.Entry() 37 sbtn = tkinter.Button(frm, text="開始", command=change_display) 38 ebtn = tkinter.Button(frm, text="終了", command=finish) 39 40 name.grid(column=0, row=0, pady=20, padx=10) 41 wname.grid(column=1, row=0, sticky='EW') 42 host.grid(column=0, row=1, padx=10) 43 whost.grid(column=1, row=1, sticky='EW') 44 sbtn.grid(column=2, row=1, padx=10) 45 ebtn.grid(column=3, row=1) 46 47 frm.mainloop() 48 49 50def second_gui(): 51 52 def change_display(): 53 frm.destroy() 54 first_gui() 55 56 def output(): 57 value = editbox.get() 58 msg.insert(0, value) 59 editbox.delete(0, "end") 60 if len(msg) <= 10: 61 for i in range(len(msg)): 62 canvas[10-i].delete("all") 63 canvas[10-i].create_text(250, 13, text=msg[i]) 64 else: 65 for j in range(10): 66 canvas[10-j].delete("all") 67 canvas[10-j].create_text(250, 13, text=msg[j]) 68 69 frm = tkinter.Tk() 70 frm.geometry('620x370') 71 frm.title('chat') 72 msg = [] 73 74 canvas = {} 75 for i in range(1,11): 76 canvas[i] = tkinter.Canvas(frm, width=500, height=20, bg="yellow") 77 canvas[i].grid(column=0, row=i, padx=10) 78 79 window_name = tkinter.Label(frm, text="チャット", font=("",20),height=2, bg="blue", bd=2, relief="groove") 80 editbox = tkinter.Entry() 81 sbtn = tkinter.Button(frm, text="入力", command=output) 82 ebtn = tkinter.Button(frm, text="終了", command=change_display) 83 84 window_name.grid(column=0, row=0, pady=10, padx=10, sticky="EW") 85 editbox.grid(column=0, row=11, padx=10, sticky='EW') 86 sbtn.grid(column=1, row=11) 87 ebtn.grid(column=2, row=11, padx=10) 88 89 frm.mainloop() 90if __name__ == '__main__': 91 port = 50000 92 bufsize = 4096 93 first_gui()

↑chat_client.py

Python

1# -*- coding: <encoding name> -*- 2 3import socket 4import threading 5import sys 6 7port = 50000 8bufsize = 4096 9 10def multi(client, name): 11 while True: 12 m = client.recv(bufsize) 13 msg = m.decode("utf-8") 14 if msg == "q": 15 print("(",name,")が接続終了") 16 print() 17 global clist 18 print(clist) 19 print() 20 del clist[name] 21 print(clist) 22 client.close() 23 break 24 print("(",name, ")", msg) 25 26server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 27server.bind(("", port)) 28server.listen() 29 30clist = {} 31 32while True: 33 client, addr = server.accept() 34 print("接続開始") 35 na = client.recv(bufsize) 36 name = str(na.decode("utf-8")) 37 if not (client in clist): 38 clist[name] = client 39 print("接続要求あり(",name,")") 40 p = threading.Thread(target = multi, args = (client, name)) 41 p.start()

↑server.py

server,clientだけの場合

Python

1 2# -*- coding: <encoding name> -*- 3 4import socket 5import threading 6import sys 7 8port = 50000 9bufsize = 4096 10 11def multi(client, name): 12 while True: 13 m = client.recv(bufsize) 14 msg = m.decode("utf-8") 15 if msg == "q": 16 print("(",name,")が接続終了") 17 print() 18 global clist 19 print(clist) 20 print() 21 del clist[name] 22 print(clist) 23 client.close() 24 break 25 print("(",name, ")", msg) 26 27server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 28server.bind(("", port)) 29server.listen() 30 31clist = {} 32 33while True: 34 client, addr = server.accept() 35 print("接続開始") 36 na = client.recv(bufsize) 37 name = str(na.decode("utf-8")) 38 if not (client in clist): 39 clist[name] = client 40 print("接続要求あり(",name,")") 41 p = threading.Thread(target = multi, args = (client, name)) 42 p.start()

↑server.py

Python

1# -*- coding: <encoding name> -*- 2 3import socket 4import sys 5 6port = 50000 7bufsize = 4096 8 9client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 10name = input("名前:") 11host = input("接続先サーバ:") 12if host == "": 13 host = "localhost" 14try: 15 client.connect((host, port)) 16except: 17 print("接続できませんでした") 18 sys.exit() 19 20client.send(name.encode("utf-8")) 21 22while True: 23 msg = input(";;;") 24 if msg == "q": 25 client.send(msg.encode("utf-8")) 26 client.close() 27 break 28 else: 29 client.send(msg.encode("utf-8"))

↑client.py

試したこと

正直エラー内容もネットで調べてみたのですがさっぱりわかりませんでした。
yhostの変数を経由せずに直接whost.get()を使用した。

補足情報(FW/ツールのバージョンなど)

エディタ:Visual Studio code
OS:Mac OS

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

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

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

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

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

t_obara

2019/10/02 00:57

ソースのインデントも含めてきちんと転記して下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問