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()
首先抱歉我的英语不好(我是法国人),因为我不想使用 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()