質問するログイン新規登録

質問編集履歴

8

修正

2021/01/25 05:20

投稿

person
person

スコア224

title CHANGED
File without changes
body CHANGED
@@ -108,7 +108,7 @@
108
108
  ```
109
109
 
110
110
  # 追記
111
- try-except追加、daemon化
111
+ try-except追加、daemon化、二重ループに再変更
112
112
  ```Python
113
113
  from tkinter import ttk
114
114
  import queue
@@ -166,17 +166,16 @@
166
166
  self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
167
167
  self.s.bind((self.ip_adr, self.port))
168
168
  self.s.listen(1)
169
- # 参考
169
+
170
- # https: // techacademy.jp/magazine/19147
171
170
  while loop_flag:
172
171
  try:
173
172
  con, adr = self.s.accept()
174
173
  print(con, adr)
175
- #while loop_flag:
174
+ while loop_flag:
176
- data = con.recv(1024)
175
+ data = con.recv(1024)
177
- print(data)
176
+ print(data)
178
- # if not data:
177
+ if not data:
179
- # break
178
+ break
180
179
  print("recv")
181
180
  rcv_data.put()
182
181
  except Exception as e:
@@ -186,4 +185,5 @@
186
185
 
187
186
  if __name__ == "__main__":
188
187
  ctrlr = Controller()
188
+
189
189
  ```

7

修正

2021/01/25 05:20

投稿

person
person

スコア224

title CHANGED
File without changes
body CHANGED
@@ -182,7 +182,6 @@
182
182
  except Exception as e:
183
183
  print(type(e))
184
184
  print(e)
185
- return
186
185
 
187
186
 
188
187
  if __name__ == "__main__":

6

修正

2021/01/25 02:51

投稿

person
person

スコア224

title CHANGED
File without changes
body CHANGED
@@ -108,7 +108,7 @@
108
108
  ```
109
109
 
110
110
  # 追記
111
- close使うように変更
111
+ try-except追加、daemon化
112
112
  ```Python
113
113
  from tkinter import ttk
114
114
  import queue
@@ -125,7 +125,7 @@
125
125
  self.main()
126
126
 
127
127
  def main(self):
128
- self.thread = threading.Thread(target=self.loop)
128
+ self.thread = threading.Thread(target=self.loop, daemon=True)
129
129
  self.thread.start()
130
130
  self.win = tk.Tk()
131
131
  self.view = View(self.win)
@@ -142,7 +142,7 @@
142
142
  loop_flag = False
143
143
 
144
144
  self.svr.s.close()
145
- self.thread.join()
145
+ #self.thread.join()
146
146
  self.win.destroy()
147
147
 
148
148
 
@@ -166,15 +166,23 @@
166
166
  self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
167
167
  self.s.bind((self.ip_adr, self.port))
168
168
  self.s.listen(1)
169
+ # 参考
170
+ # https: // techacademy.jp/magazine/19147
169
- while True:
171
+ while loop_flag:
172
+ try:
170
- con, adr = self.s.accept()
173
+ con, adr = self.s.accept()
171
- print(con, adr)
174
+ print(con, adr)
172
- while loop_flag:
175
+ #while loop_flag:
173
176
  data = con.recv(1024)
177
+ print(data)
174
- if not data:
178
+ # if not data:
175
- break
179
+ # break
176
180
  print("recv")
177
181
  rcv_data.put()
182
+ except Exception as e:
183
+ print(type(e))
184
+ print(e)
185
+ return
178
186
 
179
187
 
180
188
  if __name__ == "__main__":

5

修正

2021/01/25 02:48

投稿

person
person

スコア224

title CHANGED
File without changes
body CHANGED
@@ -108,7 +108,7 @@
108
108
  ```
109
109
 
110
110
  # 追記
111
- フラグをグローバル変数に変更、サーバのstart()呼び出し位置変更
111
+ close使うように変更
112
112
  ```Python
113
113
  from tkinter import ttk
114
114
  import queue
@@ -118,6 +118,7 @@
118
118
 
119
119
  loop_flag = True
120
120
 
121
+
121
122
  class Controller:
122
123
  def __init__(self):
123
124
  self.rcv_data = queue.Queue()
@@ -134,14 +135,17 @@
134
135
  def loop(self):
135
136
  self.svr = Server(self.rcv_data)
136
137
  self.svr.start(self.rcv_data)
138
+
137
139
  def close(self):
138
140
  global loop_flag
139
141
  # サーバ切断したい
140
142
  loop_flag = False
141
143
 
144
+ self.svr.s.close()
142
145
  self.thread.join()
143
146
  self.win.destroy()
144
147
 
148
+
145
149
  class View:
146
150
  def __init__(self, win):
147
151
  self.win = win
@@ -149,6 +153,8 @@
149
153
 
150
154
  # ソケット通信参考
151
155
  # https://techacademy.jp/magazine/19147
156
+
157
+
152
158
  class Server:
153
159
  def __init__(self, rcv_data):
154
160
  self.ip_adr = "127.0.0.1"
@@ -157,18 +163,18 @@
157
163
 
158
164
  def start(self, rcv_data):
159
165
  global loop_flag
160
- with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
166
+ self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
161
- s.bind((self.ip_adr, self.port))
167
+ self.s.bind((self.ip_adr, self.port))
162
- s.listen(1)
168
+ self.s.listen(1)
163
- while True:
169
+ while True:
164
- con, adr = s.accept()
170
+ con, adr = self.s.accept()
165
- print(con, adr)
171
+ print(con, adr)
166
- while loop_flag:
172
+ while loop_flag:
167
- data = con.recv(1024)
173
+ data = con.recv(1024)
168
- if not data:
174
+ if not data:
169
- break
175
+ break
170
- print("recv")
176
+ print("recv")
171
- rcv_data.put()
177
+ rcv_data.put()
172
178
 
173
179
 
174
180
  if __name__ == "__main__":

4

修正

2021/01/23 08:00

投稿

person
person

スコア224

title CHANGED
File without changes
body CHANGED
@@ -108,7 +108,7 @@
108
108
  ```
109
109
 
110
110
  # 追記
111
- フラグをグローバル変数に変更、スレッドのスタ位置変更
111
+ フラグをグローバル変数に変更、バのstart()呼び出し位置変更
112
112
  ```Python
113
113
  from tkinter import ttk
114
114
  import queue
@@ -125,6 +125,7 @@
125
125
 
126
126
  def main(self):
127
127
  self.thread = threading.Thread(target=self.loop)
128
+ self.thread.start()
128
129
  self.win = tk.Tk()
129
130
  self.view = View(self.win)
130
131
  self.win.protocol("WM_DELETE_WINDOW", self.close)
@@ -132,7 +133,7 @@
132
133
 
133
134
  def loop(self):
134
135
  self.svr = Server(self.rcv_data)
135
- self.svr.start()
136
+ self.svr.start(self.rcv_data)
136
137
  def close(self):
137
138
  global loop_flag
138
139
  # サーバ切断したい

3

修正

2021/01/23 05:28

投稿

person
person

スコア224

title CHANGED
File without changes
body CHANGED
@@ -132,7 +132,7 @@
132
132
 
133
133
  def loop(self):
134
134
  self.svr = Server(self.rcv_data)
135
- self.thread.start()
135
+ self.svr.start()
136
136
  def close(self):
137
137
  global loop_flag
138
138
  # サーバ切断したい

2

修正

2021/01/23 05:26

投稿

person
person

スコア224

title CHANGED
File without changes
body CHANGED
@@ -153,7 +153,6 @@
153
153
  self.ip_adr = "127.0.0.1"
154
154
  self.port = 50000
155
155
  self.buffer_size = 1024
156
- self.start(rcv_data)
157
156
 
158
157
  def start(self, rcv_data):
159
158
  global loop_flag

1

追加

2021/01/23 05:20

投稿

person
person

スコア224

title CHANGED
File without changes
body CHANGED
@@ -105,4 +105,72 @@
105
105
  File "c:/Users/user01/Desktop/test.py", line 32, in close
106
106
  self.svr.loop_flag = False
107
107
  AttributeError: 'Controller' object has no attribute 'svr'
108
+ ```
109
+
110
+ # 追記
111
+ フラグをグローバル変数に変更、スレッドのスタート位置を変更
112
+ ```Python
113
+ from tkinter import ttk
114
+ import queue
115
+ import socket
116
+ import threading
117
+ import tkinter as tk
118
+
119
+ loop_flag = True
120
+
121
+ class Controller:
122
+ def __init__(self):
123
+ self.rcv_data = queue.Queue()
124
+ self.main()
125
+
126
+ def main(self):
127
+ self.thread = threading.Thread(target=self.loop)
128
+ self.win = tk.Tk()
129
+ self.view = View(self.win)
130
+ self.win.protocol("WM_DELETE_WINDOW", self.close)
131
+ self.win.mainloop()
132
+
133
+ def loop(self):
134
+ self.svr = Server(self.rcv_data)
135
+ self.thread.start()
136
+ def close(self):
137
+ global loop_flag
138
+ # サーバ切断したい
139
+ loop_flag = False
140
+
141
+ self.thread.join()
142
+ self.win.destroy()
143
+
144
+ class View:
145
+ def __init__(self, win):
146
+ self.win = win
147
+ self.win.geometry("400x300")
148
+
149
+ # ソケット通信参考
150
+ # https://techacademy.jp/magazine/19147
151
+ class Server:
152
+ def __init__(self, rcv_data):
153
+ self.ip_adr = "127.0.0.1"
154
+ self.port = 50000
155
+ self.buffer_size = 1024
156
+ self.start(rcv_data)
157
+
158
+ def start(self, rcv_data):
159
+ global loop_flag
160
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
161
+ s.bind((self.ip_adr, self.port))
162
+ s.listen(1)
163
+ while True:
164
+ con, adr = s.accept()
165
+ print(con, adr)
166
+ while loop_flag:
167
+ data = con.recv(1024)
168
+ if not data:
169
+ break
170
+ print("recv")
171
+ rcv_data.put()
172
+
173
+
174
+ if __name__ == "__main__":
175
+ ctrlr = Controller()
108
176
  ```