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)中只有一个脚本,只要它们在同一个网络上,一个人就会知道另一个人的存在。
希望我解释得对。

4

2 回答 2

0

您可以在同一个套接字上发送和接收,不需要第二个。使用诸如select超时之类的东西来等待其他人与您联系,在超时到期时广播以让其他人了解您自己(您可能希望保留下一次广播的时间,这样您就不会在收到广播时丢失广播时间表一个数据报)。

于 2012-12-13T18:48:17.327 回答
0

感谢所有的帮助。我找到了这两个链接。第一个真的很棒,很简单,并且可以按需要工作。可以帮助别人: 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 回答