初学者的Python套接字/中断

时间:2013-09-07 03:12:16

标签: python

我正在用我的Raspberry Pi构建一个网络音乐播放器,我正试图想出一个方案,允许我向我的Pi发送一个“命令”,允许它通过网络做各种事情(如运输控制)。

这就是我在接收器上的想法(以伪代码排序):

while True:
   while nothingIsRecvD:
      do_stuff()
   do_something_with(theDataRecvDfromSocket)

我可以看一下初学者的基本代码吗?

2 个答案:

答案 0 :(得分:3)

您需要使用the socket modulethe select module

要设置套接字,您需要

  1. 使用socket.socket创建套接字。您可能希望使用AF_INET地址系列。对于TCP,请使用SOCK_STREAM;对于UDP,请使用SOCK_DGRAM
  2. bind指向要监听的接口和端口的套接字。
  3. 对于TCP,请在套接字上调用listen。 5是使用的典型积压值。
  4. 如果您正在使用TCP,那么您刚刚创建了一个侦听套接字。为了实际接收数据,您需要使用accept接受连接。使用已连接的套接字,您可以recvsend数据。

    UDP类似,但不需要接受,您将使用recvfromsendto而不是recvsend

    然而,这些方法会阻止,如果我理解正确,你就不希望这样。 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