【发布时间】:2026-02-10 11:05:01
【问题描述】:
我在使用 python 中的 socket.send 和 socket.recv 命令在两个 pi 之间发送数据时遇到了问题。我已经按照 YouTube 上的一个示例来帮助启动代码,但是每当我尝试从服务器向客户端发送其他类型的数据时,服务器就会停止并且客户端会收到一个空值。
服务器:
import socket
import time
host = '192.168.10.100'
port = 9988
def setupServer():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Socket created.")
try:
s.bind((host, port))
except socket.error as msg:
print(msg)
print("Socket bind complete.")
return s
def setupConnection():
s.listen(1) # Allows one connection at a time.
conn, address = s.accept()
print("Connected to: " + address[0] + ":" + str(address[1]))
return conn
def dataTransfer(conn):
while True:
data = conn.recv(1024) # receive the data
data = data.decode('utf-8')
if data == 'kill':
print("Server is shutting down.")
s.close()
break
elif data == 'test':
reply = 1
else:
reply = 'Unknown Command'
conn.sendall(reply)
conn.close()
s = setupServer()
while True:
try:
conn = setupConnection()
dataTransfer(conn)
except:
break
客户:
import socket
from time import sleep
host = '192.168.10.100'
port = 9988
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
while True:
command = input("Enter command: ")
if command == 'KILL':
s.send(str.encode(command))
break
s.send(str.encode(command))
reply = s.recv(1024)
print(reply)
s.close()
当我运行“kill”命令时,它正常工作:
但是当我尝试运行“测试”时,服务器脚本似乎关闭了,客户端似乎收到了一个空值而不是 1。
环顾四周后,我似乎遇到了阻塞/非阻塞问题,或者 socket.send/socket.recv 命令没有传输正确类型的数据。也许我可能还有其他错误?
【问题讨论】:
-
您是否尝试过在收到
"test"而不是int时回复字符串"1"? -
谢谢@BorrajaX 我会试试这个。
标签: python sockets server raspberry-pi client