python - 套接字不会通过 LAN 发送数据
问题描述
我试图制作一个脚本,当按下 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 远程遥控车。
解决方案
这是问题所在:
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())
而不是keyboard.add_hotkey('a', On_pressA)
应该是keyboard.add_hotkey('a', On_pressA())
(注意()
语句末尾的)
最终的代码应该有点像:
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)
推荐阅读
- php - 如何为 SSH 会话设置 PHP 版本?
- sql - 如何在 Excel 中的日期周围添加单引号以在 SQL 中使用?
- swift - 加载集合视图时节省内存
- node.js - Firebase 云消息传递:请求包含无效参数
- intellij-idea - IntelliJ Websphere 服务器本地,运行“本地部署”时出错:地址 localhost:9080 已在使用中
- python - 如何隐藏熊猫数据框中的索引列?
- javascript - 使用来自 ajax 调用的 AnitForgeryToken 从 checkboxfor 触发更新操作
- websphere - 如何授权 Java Batch 作业以便它可以从 WebSphere Liberty 中的启动 bean 运行?
- java - 一个类的HashMap和一个类的ArrayList
- php - 创建一个小的项目数据库,能够从网络浏览器中签出和返回?