回答編集履歴

2

コードがちゃんと表示されていなかったので、書き直しました。

2021/09/29 00:49

投稿

m-hana
m-hana

スコア10

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

インデントが付かない。

2021/09/29 00:49

投稿

m-hana
m-hana

スコア10

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- 以下コードになります。
7
+ 以下コードになりますが、自動でマークダウン方式なるものに変換されてインデントがつきませんので、見にくいです
8
8
 
9
9
 
10
10