工位上的Python——一个简单的UDP广播实例

最近状态神勇,头脑清晰,趁此良机,多多学习,多多看书,把以前看不懂的地方重新看了下,收获匪浅,现把两个简单的小例子献给大家:

先是一个简单的UDP广播接收的小服务器,使用UDP广播,需要注意下协议的使用,已经最最重要的socket选项的设置,设置为传说中的“socket.SO_BROADCAST”,不需要有监听,接收客户端的消息使用recvfrom,发送消息使用sendto:

代码如下:

!/usr/bin/env python 
#coding:utf-8

import socket,traceback

host = ‘‘
port = 51423

s =socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.bind((host,port))

while 1:
    try:
        message,addr = s.recvfrom(8192)
        print "Got data from " ,addr
        s.sendto("I am here",addr)
    except (KeyboardInterrupt,SystemExit):
        raise
    except:
        traceback.print_exc(

广播的客户端,客户端特别需要注意的是广播的地址写发,为<broadcaset>.

代码如下:

#!/usr/bin/env python 
#coding:utf-8

import socket,sys

dest = (‘<broadcast>‘, 51423)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)

s.sendto("hello",dest)

print "looking for replies: press Ctrl + c to stop "
while 1:
    (buf ,address) = s.recvfrom(2048)
    if not len(buf):
        break
    print "Revived from %s:%s" %(address ,buf)


本文出自 “弹指26年” 博客,请务必保留此出处http://dbbruce.blog.51cto.com/2061658/1568199

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。