问题描述
我有一个使用python的服务器/客户端,并且我正在尝试将数据(简单字符串)从客户端发送到服务器,效果很好。此外,我总是打印出从客户端发送到控制台的数据以及从服务器收到的确认消息,请参见以下打印输出:
客户端打印输出:
Sent: 29/08/2020 11:50:56 cpu=56.0C GPU=63.5C
Received: OK
服务器打印输出:
192.168.1.156 wrote:
b'29/08/2020 11:50:56 cpu=56.0C GPU=63.5C'
非常简单的客户端/服务器通信。 现在,我想让客户端处于while循环中,以便每300秒发送一次数据。但是它将停止打印到客户端站点上的控制台。通信已启动且正在运行,服务器确实可以正确获取数据。
服务器代码:
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
# just send back the OK
self.request.sendall(bytes("OK\n","utf-8"))
if __name__ == "__main__":
HOST,PORT = "192.168.1.140",9999
# Create the server,binding to localhost on port 9999
with socketserver.Tcpserver((HOST,PORT),MyTCPHandler) as server:
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
客户代码:
import socket
import sys
import time
from contextlib import contextmanager
from datetime import datetime
@contextmanager
def socketcontext(*args,**kw):
s = socket.socket(*args,**kw)
try:
yield s
finally:
s.close()
host,port = "192.168.1.140",9999
# datetime object containing current date and time
Now = datetime.Now()
dt_string = Now.strftime("%d/%m/%Y %H:%M:%s")
data = dt_string + " cpu=56.0C GPU=63.5C"
while True:
# datetime object containing current date and time
Now = datetime.Now()
dt_string = Now.strftime("%d/%m/%Y %H:%M:%s")
data = dt_string + " cpu=56.0C GPU=63.5C"
# Create a socket (SOCK_STREAM means a TCP socket)
with socketcontext(socket.AF_INET,socket.soCK_STREAM) as sock:
try:
sock.setsockopt(socket.soL_SOCKET,socket.so_KEEPALIVE,1)
sock.settimeout(5)
# Connect to server and send data
sock.connect((host,port))
sock.sendall(bytes(data + "\n","utf-8"))
# Receive data from the server and shut down
received = str(sock.recv(1024),"utf-8")
# Print communication data
print("Sent: {}".format(data))
print("Received: {}".format(received))
except Exception as err:
print("TCP connection to {}:{} Failed with error {}.".format(host,port,err))
time.sleep(300)
运行上面的客户端代码会发送数据并从服务器接收OK,但是控制台不会显示这些数据data&receive的打印输出。 删除显示了while的打印输出,但是客户端发送一次并结束,我需要再次执行它,否则我必须通过bash while-loop命令作为一个衬套执行客户端代码:
bash终端:
while true; do client.py; sleep 300; done
我不喜欢。
我做错了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)