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