質問編集履歴
8
修正
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
|
-
|
174
|
+
while loop_flag:
|
176
|
-
|
175
|
+
data = con.recv(1024)
|
177
|
-
|
176
|
+
print(data)
|
178
|
-
|
177
|
+
if not data:
|
179
|
-
|
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
修正
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
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -108,7 +108,7 @@
|
|
108
108
|
```
|
109
109
|
|
110
110
|
# 追記
|
111
|
-
|
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
|
171
|
+
while loop_flag:
|
172
|
+
try:
|
170
|
-
|
173
|
+
con, adr = self.s.accept()
|
171
|
-
|
174
|
+
print(con, adr)
|
172
|
-
|
175
|
+
#while loop_flag:
|
173
176
|
data = con.recv(1024)
|
177
|
+
print(data)
|
174
|
-
if not data:
|
178
|
+
# if not data:
|
175
|
-
|
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
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -108,7 +108,7 @@
|
|
108
108
|
```
|
109
109
|
|
110
110
|
# 追記
|
111
|
-
|
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
|
-
|
166
|
+
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
161
|
-
|
167
|
+
self.s.bind((self.ip_adr, self.port))
|
162
|
-
|
168
|
+
self.s.listen(1)
|
163
|
-
|
169
|
+
while True:
|
164
|
-
|
170
|
+
con, adr = self.s.accept()
|
165
|
-
|
171
|
+
print(con, adr)
|
166
|
-
|
172
|
+
while loop_flag:
|
167
|
-
|
173
|
+
data = con.recv(1024)
|
168
|
-
|
174
|
+
if not data:
|
169
|
-
|
175
|
+
break
|
170
|
-
|
176
|
+
print("recv")
|
171
|
-
|
177
|
+
rcv_data.put()
|
172
178
|
|
173
179
|
|
174
180
|
if __name__ == "__main__":
|
4
修正
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
修正
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.
|
135
|
+
self.svr.start()
|
136
136
|
def close(self):
|
137
137
|
global loop_flag
|
138
138
|
# サーバ切断したい
|
2
修正
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
追加
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
|
```
|