首先抱歉我的英语不好(我是法国人),因为我尽量不使用谷歌翻译。
所以,我的问题是在以下一组server.py和client.py
。只是一个客户端,每10秒发送一条消息,在server.py
上有一个增量计数器。我写这个脚本是为了检查我的大学工作服务器是否"正常"。或";die"在我登出(和我的培训)之后。
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()
问题是服务器端只打印(并且可能只接收)第一条消息/第一次传输。因此,即使在第一个消息打印之后,也不存在鼓励和连接的问题。我很清楚代码本身。我看不出有什么问题。运行时出现异常或错误
有人能帮我一下吗?诚恳地
我只需要更改您的服务器代码。我添加了多线程。现在,多个客户端可以连接到服务器,而不会阻塞整个进程。
# -*- 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()