我正在用我的 Raspberry Pi 构建一个网络音乐播放器,我正在尝试提出一个方案,允许我向我的 Pi 发送一个“命令”,这将允许它通过网络执行各种操作(例如运输控制)。
这就是我在接收器上的想法(在某种伪代码中):
while True:
while nothingIsRecvD:
do_stuff()
do_something_with(theDataRecvDfromSocket)
我可以看一些初学者的基本代码吗?
我正在用我的 Raspberry Pi 构建一个网络音乐播放器,我正在尝试提出一个方案,允许我向我的 Pi 发送一个“命令”,这将允许它通过网络执行各种操作(例如运输控制)。
这就是我在接收器上的想法(在某种伪代码中):
while True:
while nothingIsRecvD:
do_stuff()
do_something_with(theDataRecvDfromSocket)
我可以看一些初学者的基本代码吗?
要设置套接字,您需要
socket.socket
创建套接字。您可能想要使用AF_INET
地址系列。对于 TCP,使用SOCK_STREAM
; 对于 UDP,使用SOCK_DGRAM
.bind
您要侦听的接口和端口的套接字。listen
套接字。5 是使用的典型积压值。如果您使用 TCP,那么您刚刚创建了一个侦听套接字。为了实际接收数据,您需要使用accept
. 使用连接的套接字,您可以recv
或send
数据。
UDP 类似,除了不需要接受并且您将使用recvfrom
andsendto
而不是recv
and send
。
但是,这些方法会阻塞,如果我理解正确,您不会想要这样。select.select
让您等待事件在任何给定的一组套接字上发生。如果您只想检查是否有某些活动,您还可以提供零超时。一旦它检测到活动,您通常可以执行一次适当的操作而不会阻塞。
使用完套接字后,请在关闭所有连接的套接字close
后保持礼貌。
您可以考虑使用套接字在音乐播放器和服务器之间进行通信。recv() 调用(通常与 TCP 套接字一起使用)或 recvfrom() 调用(通常与 UDP 套接字一起使用)是阻塞的——因此它们应该为您的 nothingIsRecvd 案例提供一个很好的阻塞上下文,并允许您摆脱 " while True”循环。您可以在 Python 库参考中找到示例:http: //docs.python.org/release/2.5.2/lib/socket-example.html