我有以下脚本:
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),每当他们在同一个网络上时,就会知道另一台机器的存在。
希望我说得对。
答案 0 :(得分:0)
您可以在同一个套接字上发送和接收,不需要第二个套接字。使用类似select
的超时等待其他人与您联系,在超时到期时广播以让其他人了解您自己(您可能希望保留下一次广播的剩余时间,这样您就不会丢失收到数据报时的广播时间表)。
答案 1 :(得分:0)
感谢所有帮助。 我找到了这两个链接。 第一个真的很棒,很简单,并且工作得很好。可以帮助别人: http://www.cs.bilgi.edu.tr/~mgencer/Ders%20Malzemeleri/IThingTaggedFile/p2p.py