質問編集履歴

2

回答に対して追記をしました。

2021/09/26 08:40

投稿

m-hana
m-hana

スコア10

test CHANGED
File without changes
test CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  socket_server.py をコマンドプロンプトで立ち上げてから、
12
12
 
13
- socket_client.py をダブルクリックで立ち上げると接続先入力画面がありますので、アドレスを 127.0.0.1 と入力してください。動作環境は winndows10 で、動作確認済です。
13
+ socket_client.py をダブルクリックで立ち上げてください。動作環境は winndows10 で、動作確認済です。
14
-
14
+
15
- 接続が一回で切れてしまうので send_func でボタンを押すごとにサーバーとポートを設定しています。
15
+ 接続が一回で切れてしまいます。
16
16
 
17
17
 
18
18
 
@@ -22,6 +22,18 @@
22
22
 
23
23
 
24
24
 
25
+ -------------------------------------------------------
26
+
27
+ 追記です。
28
+
29
+ with文の問題という指摘がございましたので、socket_client.py を with文を使わないでエラーになってしまうコードに編集しなおしました。接続ボタンを毎回おして接続しなおさないと、メッセージを連続でおくれません。
30
+
31
+ ソケット通信はこういうものなのでしょうか?
32
+
33
+ メッセージごとに接続しないといけないものですか?
34
+
35
+ ご教授お願いします。
36
+
25
37
 
26
38
 
27
39
  socket_serber.py
@@ -72,111 +84,49 @@
72
84
 
73
85
  from tkinter import messagebox
74
86
 
75
- import configparser
76
-
77
- import os
78
-
79
87
  import socket
80
88
 
81
89
 
82
90
 
83
- # configparser のインスタンス化
91
+
84
-
85
- config = configparser.ConfigParser()
92
+
86
-
87
-
88
-
89
- # 設定ファイルへ保存
90
-
91
- def writing_func():
93
+ def connect_func():
92
-
93
- with open("server.ini", "w+") as file:
94
+
94
-
95
- config.write(file)
95
+ global server_address
96
-
97
-
98
-
96
+
99
- if os.path.exists("server.ini"): # ファイルパスが存在すれば True
97
+ global sock
100
-
98
+
101
- # 読み込む設定ファイル指定
99
+ # エントリーボックスの値取得
102
-
103
- config.read("server.ini")
100
+
104
-
105
- else:
106
-
107
- serverName = ''
101
+ serverName = '127.0.0.1'
108
102
 
109
103
  port = 50000
110
104
 
111
- config["Connection address"] = {
112
-
113
- "server": serverName,
114
-
115
- "port": port
116
-
117
- }
118
-
119
- writing_func()
120
-
121
-
122
-
123
- def connect_func():
124
-
125
- global server_address
126
-
127
- # エントリーボックスの値を取得
128
-
129
- serverName = hostName_box.get()
130
-
131
- port = 50000
132
-
133
- config["Connection address"] = {
134
-
135
- "server": serverName,
136
-
137
- "port": port
138
-
139
- }
140
-
141
105
  server_address = (serverName, port)
142
106
 
143
-
107
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
108
+
109
+ sock.connect(server_address)
110
+
111
+
112
+
113
+ def close_func():
114
+
115
+ sock.clse()
116
+
117
+
118
+
119
+ def send_func(text):
144
120
 
145
121
  try:
146
122
 
147
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
148
-
149
- sock.connect(server_address)
123
+ sock.send(text.encode())
150
-
151
- sock.close()
152
-
153
- writing_func()
154
124
 
155
125
  except:
156
126
 
157
- messagebox.showerror("エラーでござる...", "正しきアドレスを" + "\n" + "入力してくだされ...")
158
-
159
-
160
-
161
- def send_func(text):
162
-
163
- try:
164
-
165
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
166
-
167
- sock.connect(server_address)
168
-
169
- sock.send(text.encode())
170
-
171
- # 通信を閉じる
172
-
173
- sock.close()
174
-
175
- except:
176
-
177
127
  # エラー通知
178
128
 
179
- messagebox.showerror("エラーでござる...", "アドレスを入力して" + "\n" + "設定ボタンを押してくだせぇ...")
129
+ messagebox.showerror("エラーでござる...")
180
130
 
181
131
 
182
132
 
@@ -214,20 +164,14 @@
214
164
 
215
165
  frame1 = ttk.Labelframe(root, text = "接続先", padding = 10)
216
166
 
217
- host = config["Connection address"]
218
-
219
- hostDefo = tk.StringVar()
220
-
221
- hostDefo.set(host.get("server"))
222
-
223
- hostName_box = tk.Entry(frame1, width=20, textvariable = hostDefo)
224
-
225
- hostName_box.pack(side = tk.LEFT)
226
-
227
- connect_btn = tk.Button(frame1, text="設定", command = connect_func)
167
+ connect_btn = tk.Button(frame1, text="接続", command = connect_func)
228
168
 
229
169
  connect_btn.pack()
230
170
 
171
+ close_btn = tk.Button(frame1, text="切断", command = close_func)
172
+
173
+ close_btn.pack()
174
+
231
175
  frame1.pack(padx=10, pady=10, anchor=tk.W)
232
176
 
233
177
 

1

動作環境を追加しました。

2021/09/26 08:39

投稿

m-hana
m-hana

スコア10

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,20 @@
1
- pythonでGUI制御したソケット通信をしたいです。GUIで接続ボタンを押したときにコネクトして、それ以降ボタンを押したときにメッセージを送りたいという場合、一回で接続が切れてしまいます。ボタンを押すごとに毎回コネクトするのは普通のことなのでしょうか?切断せずメッセージは送る事はできるのでしょうか?以下テストで作りました。接続が一回で切れてしまうので send_func でボタンを押すごとにサーバーとポートを設定しています。
1
+ pythonでGUI制御ソケット通信をしたいです。
2
+
3
+ GUIで接続ボタンを押したときにコネクトして、それ以降ボタンを押したときにメッセージを送りたいという場合、一回で接続が切れてしまいます。
4
+
5
+ ボタンを押すごとに毎回コネクトするのは普通のことなのでしょうか?
6
+
7
+ 切断せずメッセージは送る事はできるのでしょうか?
8
+
9
+ 以下テストで作りました。
10
+
11
+ socket_server.py をコマンドプロンプトで立ち上げてから、
12
+
13
+ socket_client.py をダブルクリックで立ち上げると接続先入力画面がありますので、アドレスを 127.0.0.1 と入力してください。動作環境は winndows10 で、動作確認済です。
14
+
15
+ 接続が一回で切れてしまうので send_func でボタンを押すごとにサーバーとポートを設定しています。
16
+
17
+
2
18
 
3
19
  これで正解という事なら問題ないんですが、、、
4
20
 
@@ -6,6 +22,8 @@
6
22
 
7
23
 
8
24
 
25
+
26
+
9
27
  socket_serber.py
10
28
 
11
29
  ```