2

私は自分の Raspberry Pi でネットワーク ミュージック プレーヤーを構築しており、ネットワーク経由でさまざまなことを実行できるようにする「コマンド」を Pi に送信できるようにするスキームを考え出そうとしています (トランスポート コントロール)。

これは私が受信機で考えていることです(一種の疑似コードで):

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

私が見ることができる初心者向けの基本的なコードはありますか?

4

2 に答える 2

4

モジュールモジュールを使用するsocket必要がありますselect

ソケットをセットアップするには、次のことが必要です。

  1. socket.socketソケットの作成に使用します。AF_INETおそらくアドレスファミリを使用したいと思うでしょう。TCP の場合は、SOCK_STREAM;を使用します。UDP の場合は、 を使用しますSOCK_DGRAM
  2. bindリッスンするインターフェイスとポートへのソケット。
  3. TCP の場合、listenソケットで呼び出します。5 は、使用される一般的なバックログ値です。

TCP を使用している場合は、リッスン ソケットを作成しただけです。実際にデータを受信するには、 を使用して接続を受け入れる必要がありますaccept。接続されたソケットを使用すると、データを取得できrecvますsend

UDP も似ていますが、受け入れる必要がなく、 recvfromandsendtoではなくrecvandを使用しますsend

ただし、これらのメソッドはブロックします。私の理解が正しければ、それは望ましくありません。select.select特定のソケット セットのいずれかでイベントが発生するまで待機できます。何らかのアクティビティがあるかどうかを確認するだけの場合は、ゼロ タイムアウトを指定することもできます。アクティビティが検出されると、通常はブロックせずに適切なアクションを 1 回実行できます。

ソケットの使用が終わったら、接続されているソケットをシャットダウンしcloseた後、礼儀正しくしてください。

于 2013-09-07T03:25:01.073 に答える
0

音楽プレーヤーとサーバー間の通信にソケットを使用することを検討できます。recv() 呼び出し (通常は TCP ソケットで使用される) または recvfrom() 呼び出し (通常は UDP ソケットで使用される) はブロックしているため、nothingIsRecvd ケースに優れたブロック コンテキストを提供し、" while True」ループ。Python ライブラリ リファレンスで例を見つけることができます: http://docs.python.org/release/2.5.2/lib/socket-example.html

于 2013-09-07T03:18:14.037 に答える