Python 套接字 - 服务器在仅收到一条消息后停止

Python Socket - Server Stop after receive only one message

首先抱歉我的英语不好(我是法国人),因为我不想使用 Google 翻译。

所以,我的问题出在下面的server.py和client.py组中。只是一个客户端,每 10 秒发送一条消息,在 server.py 上带有一个增量计数器。我写这个脚本来检查我的大学工作服务器在我注销后是“活”还是“死”(为了我的训练)。

server.py:

# -*- coding: utf-8 -*-

import socket

HOST = 'localhost'
PORT = 1602

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind(('localhost', PORT))

while True:
        socket.listen(5)
        client, address = socket.accept()
        print(f"{address} connected")

        response = client.recv(1024)
        print(response.decode())

print("Close")
client.close()
socket.close()

client.py:

# -*- coding: utf-8 -*-

import socket
from apscheduler.schedulers.blocking import BlockingScheduler

HOST = 'localhost'
PORT = 1602

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((HOST, PORT))
print(f"Connection on {PORT}")

timeCount = 0

def some_job():
    global timeCount
    timeCount += 1

    print(f"Send N°{timeCount}")
    string = f'Schedule Transmission N°{timeCount}'
    socket.send(f"Schedule Transmission N°{timeCount}".encode())

scheduler = BlockingScheduler()
scheduler.add_job(some_job, 'interval', seconds=5)
scheduler.start()

print("Close")
socket.close()

问题是服务器端只打印(可能只接收)第一个 message/first 传输。因此,这不是编码问题,即使在第一条消息打印之后,连接似乎也存在。 我很了解代码本身。我不明白有什么问题。 运行.

时出现异常或错误

有人可以帮帮我吗?

亲切

我只需要更改您的服务器代码。我添加了多线程。现在多个客户端可以连接到服务器而不会阻塞整个过程。

# -*- coding: utf-8 -*-

import socket
import threading

HOST = 'localhost'
PORT = 1602

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind(('localhost', PORT))

def handle_client(client, addr):
    print(f"[NEW CONNECTION] {addr} connected.")
    connected = True
    while connected:
        response = client.recv(1024)
        if response:
            print(f"[{addr}] {response.decode()}")

    client.close()
    

while True:
    socket.listen()
    client, addr = socket.accept()
    thread = threading.Thread(target=handle_client, args=(client, addr))
    thread.start()