pythonめも(socket server)

クライアントが閉じたときの検出方法があんまり載っていなかったのでメモ。
クライアントが閉じると b” を受信するらしい。ノンブロッキングなのは当時作っていた実装に合わせたもので、特に意味はない。

import socket
import time

# ソケット作成
socket_console = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket_console.bind(('127.0.0.1', int('10001')))
socket_console.listen()
socket_console.setblocking(False)

sequence = 0
BUFFER_SIZE = 1024

while True:

    # 初期設定
    if 0 == sequence:

        # 接続待ち
        print("Waiting connection")

        sequence = 10

    # 接続処理
    elif 10 == sequence:

        # 接続開始
        try:
            (connection, clientAddress) = socket_console.accept()
            print('Client connected' + " " + str(clientAddress))
            sequence = 20
        except BlockingIOError:
            continue

    # 通信処理
    elif 20 == sequence:

        try:
            # 受信処理
            data = connection.recv(BUFFER_SIZE)
            if data:
                # そのまま返送
                connection.send(data)

            # 相手がcloseした場合の処理
            elif b'' == data :
                print("Client disconnected")
                connection.close()
                sequence = 0

        except BlockingIOError:
            continue

    time.sleep(0.1)

コメント