0

次のスクリプトがあります。

import socket
import sys
import traceback
msg = socket.gethostbyname(socket.gethostname())
dest = ('<broadcast>',10100)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto(msg, dest)
print "Sent."
while 1:
    (buf,address)=s.recvfrom(10100)
    if not len(buf):
        break
    print "Received from %s: %s" %(address, buf)

その後:

import socket
import traceback
import os
host = ''
port = 10100
sx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sx.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sx.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sx.bind((host,port))
while 1:
    try:
        message, address = sx.recvfrom(10104)
        print "Got data from", address
        sx.sendto("ola",address)
    except (KeyboardInterrupt, SystemExit):
        raise
    except:
        traceback.print_exc()

両方を同じスクリプトで使用するのに問題があります。
ソケットなどについてもっと知りたかっただけで、特に何もありません。
私の考えは、各マシン (Raspberry Pi) にスクリプトを 1 つだけ配置し、それらが同じネットワーク上にあるときはいつでも、一方が他方の存在を認識できるようにすることでした。
私が正しく説明したことを願っています。

4

2 に答える 2

0

すべての助けをありがとう。この2つのリンクを見つけました。最初のものは本当に素晴らしく、シンプルで、必要に応じて機能しています。他の誰かを助けるかもしれません: http://www.cs.bilgi.edu.tr/~mgencer/Ders%20Malzemeleri/IThingTaggedFile/p2p.py

https://github.com/zetaron/python-udp-p2p

于 2012-12-15T15:03:06.797 に答える
0

同じソケットで送受信できます。2 番目のソケットは必要ありません。タイムアウトのようなものを使用selectして、他の人があなたに連絡するのを待ち、タイムアウトの期限が切れたときにブロードキャストして、他の人に自分のことを知らせます(次のブロードキャストまでの残り時間のようなものを保持したい場合があります。データグラム)。

于 2012-12-13T18:48:17.327 に答える