回答編集履歴
2
コードがちゃんと表示されていなかったので、書き直しました。
test
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
いろいろためしてみたのですが、やはりGUI
|
1
|
+
いろいろためしてみたのですが、やはりGUIの送信ボタンを押すごとに接続が切れてしまうので、送信ボタンを押すごとにコネクトしなおすというやりかたで対処することにします。連打してもちゃんとメッセージが送れるので大丈夫かなと。それよりループで待機しているほうがスペックを使うと思うので、この方法で行きます。
|
2
2
|
|
3
3
|
回答いただいたみなさま、ありがとうございました。とても勉強になりました!
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
以下コードになります
|
7
|
+
以下コードになります。
|
8
8
|
|
9
9
|
|
10
10
|
|
11
11
|
server.py
|
12
12
|
|
13
|
-
|
13
|
+
```
|
14
14
|
|
15
15
|
import socket
|
16
16
|
|
@@ -42,11 +42,13 @@
|
|
42
42
|
|
43
43
|
print("error!!!")
|
44
44
|
|
45
|
+
```
|
46
|
+
|
45
47
|
|
46
48
|
|
47
49
|
client.py
|
48
50
|
|
49
|
-
|
51
|
+
```
|
50
52
|
|
51
53
|
import tkinter as tk
|
52
54
|
|
@@ -62,9 +64,9 @@
|
|
62
64
|
|
63
65
|
|
64
66
|
|
65
|
-
INTERVAL = 3
|
67
|
+
INTERVAL = 3 # ソケット接続時のリトライ待ち時間
|
66
|
-
|
68
|
+
|
67
|
-
RETRY = 5
|
69
|
+
RETRY = 5 # ソケット接続時のリトライ回数
|
68
70
|
|
69
71
|
|
70
72
|
|
@@ -88,6 +90,10 @@
|
|
88
90
|
|
89
91
|
|
90
92
|
|
93
|
+
# 確認のために一回接続して成功したら閉じる
|
94
|
+
|
95
|
+
# サーバーとの接続 RETRY の回数だけリトライ
|
96
|
+
|
91
97
|
for x in range(RETRY):
|
92
98
|
|
93
99
|
try:
|
@@ -106,6 +112,8 @@
|
|
106
112
|
|
107
113
|
except socket.error:
|
108
114
|
|
115
|
+
# 接続を確立できない場合、INTERVAL 秒待ってリトライ
|
116
|
+
|
109
117
|
time.sleep(INTERVAL)
|
110
118
|
|
111
119
|
print('[{0}] retry after wait{1}s'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), str(INTERVAL)) )
|
@@ -128,10 +136,14 @@
|
|
128
136
|
|
129
137
|
except socket.error:
|
130
138
|
|
139
|
+
# エラー通知
|
140
|
+
|
131
141
|
messagebox.showerror("エラーでござる...", "アドレスを入力してください。")
|
132
142
|
|
133
143
|
|
134
144
|
|
145
|
+
# サーバーへコマンド送信関数
|
146
|
+
|
135
147
|
def send(self, text):
|
136
148
|
|
137
149
|
try:
|
@@ -146,6 +158,8 @@
|
|
146
158
|
|
147
159
|
except:
|
148
160
|
|
161
|
+
# エラー通知
|
162
|
+
|
149
163
|
messagebox.showerror("エラーでござる...")
|
150
164
|
|
151
165
|
|
@@ -154,21 +168,27 @@
|
|
154
168
|
|
155
169
|
|
156
170
|
|
171
|
+
### GUI ###
|
172
|
+
|
157
173
|
|
158
174
|
|
159
175
|
root = tk.Tk()
|
160
176
|
|
177
|
+
# ウインドウ名
|
178
|
+
|
161
179
|
root.title("接続テスト")
|
162
180
|
|
163
181
|
|
164
182
|
|
165
183
|
|
166
184
|
|
185
|
+
# メニューバーの作成
|
186
|
+
|
167
187
|
menubar = tk.Menu(root)
|
168
188
|
|
169
189
|
root.configure(menu = menubar)
|
170
190
|
|
171
|
-
|
191
|
+
# File メニュー
|
172
192
|
|
173
193
|
filemenu = tk.Menu(menubar, tearoff = 0)
|
174
194
|
|
@@ -178,6 +198,8 @@
|
|
178
198
|
|
179
199
|
|
180
200
|
|
201
|
+
# ラベルフレーム
|
202
|
+
|
181
203
|
frame1 = ttk.Labelframe(root, text = "接続先:localhost", padding = 10)
|
182
204
|
|
183
205
|
connect_btn = tk.Button(frame1, text="接続確認", command= lambda: client.host_check())
|
@@ -188,6 +210,8 @@
|
|
188
210
|
|
189
211
|
|
190
212
|
|
213
|
+
# ボタン
|
214
|
+
|
191
215
|
frame2 = tk.Frame(root)
|
192
216
|
|
193
217
|
btn1 = tk.Button(frame2, width=20, height=4, text="おはよう", command= lambda: client.send("おはよう")).grid(row = 1, column = 0, padx = 10, pady = 10)
|
@@ -200,8 +224,12 @@
|
|
200
224
|
|
201
225
|
|
202
226
|
|
227
|
+
# ウインドウサイズの固定
|
228
|
+
|
203
229
|
root.resizable(width = False, height = False)
|
204
230
|
|
205
231
|
|
206
232
|
|
207
233
|
root.mainloop()
|
234
|
+
|
235
|
+
```
|
1
インデントが付かない。
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
以下コードになります。
|
7
|
+
以下コードになりますが、自動でマークダウン方式なるものに変換されてインデントがつきませんので、見にくいです。
|
8
8
|
|
9
9
|
|
10
10
|
|