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

質問編集履歴

2

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

2021/09/26 08:40

投稿

m-hana
m-hana

スコア10

title CHANGED
File without changes
body CHANGED
@@ -4,12 +4,18 @@
4
4
  切断せずメッセージは送る事はできるのでしょうか?
5
5
  以下テストで作りました。
6
6
  socket_server.py をコマンドプロンプトで立ち上げてから、
7
- socket_client.py をダブルクリックで立ち上げると接続先入力画面がありますので、アドレスを 127.0.0.1 と入力してください。動作環境は winndows10 で、動作確認済です。
7
+ socket_client.py をダブルクリックで立ち上げてください。動作環境は winndows10 で、動作確認済です。
8
- 接続が一回で切れてしまうので send_func でボタンを押すごとにサーバーとポートを設定しています。
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 = hostName_box.get()
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
- sock.connect(server_address)
57
+ def close_func():
76
- sock.close()
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("エラーでござる...", "アドレスを入力して" + "\n" + "設定ボタンを押してくだせぇ...")
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="設定", command = connect_func)
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

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

2021/09/26 08:39

投稿

m-hana
m-hana

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,16 @@
1
- pythonでGUI制御したソケット通信をしたいです。GUIで接続ボタンを押したときにコネクトして、それ以降ボタンを押したときにメッセージを送りたいという場合、一回で接続が切れてしまいます。ボタンを押すごとに毎回コネクトするのは普通のことなのでしょうか?切断せずメッセージは送る事はできるのでしょうか?以下テストで作りました。接続が一回で切れてしまうので send_func でボタンを押すごとにサーバーとポートを設定しています。
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