質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

pythonのソケット通信はメッセージを送るごとにアドレス、ポート番号など毎回接続しないといけないものですか?

m-hana
m-hana

総合スコア5

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

3回答

0評価

0クリップ

914閲覧

投稿2021/09/26 07:58

編集2021/09/26 08:39

pythonでGUI制御のソケット通信をしたいです。
GUIで接続ボタンを押したときにコネクトして、それ以降ボタンを押したときにメッセージを送りたいという場合、一回で接続が切れてしまいます。
ボタンを押すごとに毎回コネクトするのは普通のことなのでしょうか?
切断せずメッセージは送る事はできるのでしょうか?
以下テストで作りました。
socket_server.py をコマンドプロンプトで立ち上げてから、
socket_client.py をダブルクリックで立ち上げてください。動作環境は winndows10 で、動作確認済です。
接続が一回で切れてしまいます。

これで正解という事なら問題ないんですが、、、
正解かどうかがわかりません。ご教授お願いします。


追記です。
with文の問題という指摘がございましたので、socket_client.py を with文を使わないでエラーになってしまうコードに編集しなおしました。接続ボタンを毎回おして接続しなおさないと、メッセージを連続でおくれません。
ソケット通信はこういうものなのでしょうか?
メッセージごとに接続しないといけないものですか?
ご教授お願いします。

socket_serber.py

import socket PORT = 50000 BUFFER_SIZE = 1024 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind(('127.0.0.1', PORT)) s.listen() while True: (connection, client) = s.accept() try: data = connection.recv(BUFFER_SIZE) print(data.decode(), client) finally: connection.close()

socket_client.py

import tkinter as tk from tkinter import ttk from tkinter import messagebox import socket def connect_func(): global server_address global sock # エントリーボックスの値を取得 serverName = '127.0.0.1' port = 50000 server_address = (serverName, port) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(server_address) def close_func(): sock.clse() def send_func(text): try: sock.send(text.encode()) except: # エラー通知 messagebox.showerror("エラーでござる...") ### GUI ### root = tk.Tk() # ウインドウ名 root.title("接続テスト") # メニューバーの作成 menubar = tk.Menu(root) root.configure(menu = menubar) # File メニュー filemenu = tk.Menu(menubar, tearoff = 0) menubar.add_cascade(label = "ファイル", menu = filemenu) filemenu.add_command(label = "終了", command = lambda: root.destroy()) # ラベルフレーム frame1 = ttk.Labelframe(root, text = "接続先", padding = 10) connect_btn = tk.Button(frame1, text="接続", command = connect_func) connect_btn.pack() close_btn = tk.Button(frame1, text="切断", command = close_func) close_btn.pack() frame1.pack(padx=10, pady=10, anchor=tk.W) # ボタン frame2 = tk.Frame(root) btn1 = tk.Button(frame2, width=20, height=4, text="おはよう", command= lambda: send_func("おはよう")).grid(row = 1, column = 0, padx = 10, pady = 10) btn2 = tk.Button(frame2, width=20, height=4, text="こんにちは", command= lambda: send_func("こんにちは")).grid(row = 1, column = 1, padx = 10, pady = 10) btn3 = tk.Button(frame2, width=20, height=4, text="こんばんは", command= lambda: send_func("こんばんは")).grid(row = 2, column = 0, padx = 10, pady = 10) frame2.pack() # ウインドウサイズの固定 root.resizable(width = False, height = False) root.mainloop()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。