简体   繁体   English

sockets 不会通过 LAN 发送数据

[英]sockets wont send data over LAN

im trying to make a script that when a WASD button is pressed it uses a socket to send that to a server over a LAN.network here is the client:我试图制作一个脚本,当按下 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)

the keypress work it prints when i press A like its supposed to but it wont send that data to the server here is the server:当我像它应该的那样按 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

im probably doing something wrong as im new to python. im trying to use this to make a wifi remote RC car.我可能做错了什么,因为我是 python 的新手。我试图用它来制作 wifi 遥控车。

Here's the problem:这是问题所在:

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())

Instead of keyboard.add_hotkey('a', On_pressA) it should be keyboard.add_hotkey('a', On_pressA()) (Notice the () at the end of statement)而不是keyboard.add_hotkey('a', On_pressA)它应该是keyboard.add_hotkey('a', On_pressA()) (注意语句末尾的()

The final code should look somewhat like:最终代码应该类似于:

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM