質問編集履歴
2
回答に対して追記をしました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,12 +4,18 @@
|
|
4
4
|
切断せずメッセージは送る事はできるのでしょうか?
|
5
5
|
以下テストで作りました。
|
6
6
|
socket_server.py をコマンドプロンプトで立ち上げてから、
|
7
|
-
socket_client.py をダブルクリックで立ち上げ
|
7
|
+
socket_client.py をダブルクリックで立ち上げてください。動作環境は winndows10 で、動作確認済です。
|
8
|
-
接続が一回で切れてしま
|
8
|
+
接続が一回で切れてしまいます。
|
9
9
|
|
10
10
|
これで正解という事なら問題ないんですが、、、
|
11
11
|
正解かどうかがわかりません。ご教授お願いします。
|
12
12
|
|
13
|
+
-------------------------------------------------------
|
14
|
+
追記です。
|
15
|
+
with文の問題という指摘がございましたので、socket_client.py を with文を使わないでエラーになってしまうコードに編集しなおしました。接続ボタンを毎回おして接続しなおさないと、メッセージを連続でおくれません。
|
16
|
+
ソケット通信はこういうものなのでしょうか?
|
17
|
+
メッセージごとに接続しないといけないものですか?
|
18
|
+
ご教授お願いします。
|
13
19
|
|
14
20
|
socket_serber.py
|
15
21
|
```
|
@@ -35,59 +41,28 @@
|
|
35
41
|
import tkinter as tk
|
36
42
|
from tkinter import ttk
|
37
43
|
from tkinter import messagebox
|
38
|
-
import configparser
|
39
|
-
import os
|
40
44
|
import socket
|
41
45
|
|
42
|
-
# configparser のインスタンス化
|
43
|
-
config = configparser.ConfigParser()
|
44
46
|
|
45
|
-
# 設定ファイルへ保存
|
46
|
-
def writing_func():
|
47
|
-
with open("server.ini", "w+") as file:
|
48
|
-
config.write(file)
|
49
|
-
|
50
|
-
if os.path.exists("server.ini"): # ファイルパスが存在すれば True
|
51
|
-
# 読み込む設定ファイルを指定
|
52
|
-
config.read("server.ini")
|
53
|
-
else:
|
54
|
-
serverName = ''
|
55
|
-
port = 50000
|
56
|
-
config["Connection address"] = {
|
57
|
-
"server": serverName,
|
58
|
-
"port": port
|
59
|
-
}
|
60
|
-
writing_func()
|
61
|
-
|
62
47
|
def connect_func():
|
63
48
|
global server_address
|
49
|
+
global sock
|
64
50
|
# エントリーボックスの値を取得
|
65
|
-
serverName =
|
51
|
+
serverName = '127.0.0.1'
|
66
52
|
port = 50000
|
67
|
-
config["Connection address"] = {
|
68
|
-
"server": serverName,
|
69
|
-
"port": port
|
70
|
-
}
|
71
53
|
server_address = (serverName, port)
|
54
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
55
|
+
sock.connect(server_address)
|
72
56
|
|
73
|
-
try:
|
74
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
75
|
-
|
57
|
+
def close_func():
|
76
|
-
|
58
|
+
sock.clse()
|
77
|
-
writing_func()
|
78
|
-
except:
|
79
|
-
messagebox.showerror("エラーでござる...", "正しきアドレスを" + "\n" + "入力してくだされ...")
|
80
59
|
|
81
60
|
def send_func(text):
|
82
61
|
try:
|
83
|
-
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
84
|
-
sock.connect(server_address)
|
85
62
|
sock.send(text.encode())
|
86
|
-
# 通信を閉じる
|
87
|
-
sock.close()
|
88
63
|
except:
|
89
64
|
# エラー通知
|
90
|
-
messagebox.showerror("エラーでござる..."
|
65
|
+
messagebox.showerror("エラーでござる...")
|
91
66
|
|
92
67
|
### GUI ###
|
93
68
|
|
@@ -106,13 +81,10 @@
|
|
106
81
|
|
107
82
|
# ラベルフレーム
|
108
83
|
frame1 = ttk.Labelframe(root, text = "接続先", padding = 10)
|
109
|
-
host = config["Connection address"]
|
110
|
-
hostDefo = tk.StringVar()
|
111
|
-
hostDefo.set(host.get("server"))
|
112
|
-
hostName_box = tk.Entry(frame1, width=20, textvariable = hostDefo)
|
113
|
-
hostName_box.pack(side = tk.LEFT)
|
114
|
-
connect_btn = tk.Button(frame1, text="
|
84
|
+
connect_btn = tk.Button(frame1, text="接続", command = connect_func)
|
115
85
|
connect_btn.pack()
|
86
|
+
close_btn = tk.Button(frame1, text="切断", command = close_func)
|
87
|
+
close_btn.pack()
|
116
88
|
frame1.pack(padx=10, pady=10, anchor=tk.W)
|
117
89
|
|
118
90
|
# ボタン
|
1
動作環境を追加しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,16 @@
|
|
1
|
-
pythonでGUI
|
1
|
+
pythonでGUI制御のソケット通信をしたいです。
|
2
|
+
GUIで接続ボタンを押したときにコネクトして、それ以降ボタンを押したときにメッセージを送りたいという場合、一回で接続が切れてしまいます。
|
3
|
+
ボタンを押すごとに毎回コネクトするのは普通のことなのでしょうか?
|
4
|
+
切断せずメッセージは送る事はできるのでしょうか?
|
5
|
+
以下テストで作りました。
|
6
|
+
socket_server.py をコマンドプロンプトで立ち上げてから、
|
7
|
+
socket_client.py をダブルクリックで立ち上げると接続先入力画面がありますので、アドレスを 127.0.0.1 と入力してください。動作環境は winndows10 で、動作確認済です。
|
8
|
+
接続が一回で切れてしまうので send_func でボタンを押すごとにサーバーとポートを設定しています。
|
9
|
+
|
2
10
|
これで正解という事なら問題ないんですが、、、
|
3
11
|
正解かどうかがわかりません。ご教授お願いします。
|
4
12
|
|
13
|
+
|
5
14
|
socket_serber.py
|
6
15
|
```
|
7
16
|
import socket
|