【发布时间】:2021-04-18 12:20:38
【问题描述】:
我正在尝试编写一个脚本,当按下 WASD 按钮时,它会使用套接字通过 LAN 网络将其发送到服务器 这是客户:
import socket
from pynput.keyboard import Listener
HOST = '127.0.0.1' # The server's hostname or IP address
PORT = 65432 # The port used by the server
import keyboard
def On_pressA():
print("dda")
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'LEFT')
data = s.recv(1024)
print('Received', repr(data))
def On_pressW():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'FORWARD')
data = s.recv(1024)
print('Received', repr(data))
def On_pressS():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'BACKWARDS')
data = s.recv(1024)
print('Received', repr(data))
def On_pressD():
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'RIGHT')
data = s.recv(1024)
print('Received', repr(data))
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
keyboard.add_hotkey('a', On_pressA)
keyboard.add_hotkey('d', On_pressD())
keyboard.add_hotkey('s', On_pressS())
keyboard.add_hotkey('w', On_pressW())
s.sendall(b'LEFT')
data = s.recv(1025)
当我按预期的方式按 A 时它打印的按键工作,但它不会将该数据发送到服务器 这是服务器:
import socket
HOST = '127.0.0.1'
PORT = 65432
loop = 0
while loop < 5:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Done', addr)
while True:
data = conn.recv(1024)
print(data)
if not data:
print("Nothing sent")
conn.sendall
我可能做错了,因为我是 python 新手。我正在尝试用它来制作 wifi 遥控遥控车。
【问题讨论】:
-
感谢您提供代码和对问题的详细解释。您似乎忘记将服务器中的
data发送回您的回显客户端。如果将服务器代码最后一行的conn.sendall更改为conn.sendall(data)会发生什么 -
现在垃圾邮件'b'
-
那是因为你的 while 循环永无止境:
while loop < 5:。您将需要增加您的loop计数器或删除循环。 -
客户端在启动时崩溃并开始发送垃圾邮件 b'' 然后“没有发送任何内容”
标签: python sockets networking server keyboard