广播服务器和客户端在同一个脚本上?

时间:2012-12-13 18:34:15

标签: python sockets raspberry-pi

我有以下脚本:

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),每当他们在同一个网络上时,就会知道另一台机器的存在。
希望我说得对。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

感谢所有帮助。 我找到了这两个链接。 第一个真的很棒,很简单,并且工作得很好。可以帮助别人: http://www.cs.bilgi.edu.tr/~mgencer/Ders%20Malzemeleri/IThingTaggedFile/p2p.py

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