六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 47|回复: 0

python 写的udp服务器和客户端变身的程序。

[复制链接]

升级  48%

6

主题

6

主题

6

主题

童生

Rank: 1

积分
24
 楼主| 发表于 2013-1-15 02:57:41 | 显示全部楼层 |阅读模式
目标:实现发送端和接收端互相变身
分为  接收端
      发送端

设定可以互相变身的两台机器的 IP.

发送端特征: 0、接到变身指令
             1、检测本地MSSQL库
                1)、如果可以访问就广播(本机IP)包给接收端
                2)、如果不能访问就广播(另外一台机器的IP),然后变成接收端


接收端特征:0、接到变身指令
            1、接受数据
               1)、对比IP是否是自身IP,如果是,变身为发送端
#coding:gb2312#主备切换器import socketimport osimport pymssqlimport ctypesimport timeimport sys#--------------------------------------------------------------------------## 定义发送广播包函数#--------------------------------------------------------------------------#def sendserver():    in_data=raw_input('2为发送端')    if in_data=='2':        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)        if loaclhost_ip=='127.0.0.1':            windows_msg('''1、 'setting.ini'中的'GLOBAL'的字段不能设置为127.0.0.12、网络未连接"3、本地IP不能设置为127.0.0.1''','警告')            sys.exit()        else:            while 1:                try:                    con=pymssql.connect(user='sa',password='sa',\                    host='localhost',database='s1config')                    con.close()                    print '连接数据库成功,发送数据IP1!',loaclhost_ip,time.ctime()                    logfile('%s  连接数据库成功,发送数据IP1!%s \n'%(time.ctime(),loaclhost_ip))                    s.sendto(loaclhost_ip,('255.255.255.255',3999))                    time.sleep(20)                except:                    dll_data.setDBFlag(0)                    for i in ipdata:                        if i!=loaclhost_ip:                            print '数据库连接不成功,发送数据IP',i,time.ctime()                            logfile('%s 数据库连接不成功,发送数据IP是:%s  \n'%(time.ctime(),i))                            try:                                s.sendto(i,('255.255.255.255',3999))                            except:                                logfile('%s send不成功, \n'%(time.ctime()))                            try:                                print " 偶也,我要变身了,我成为接受方了",time.ctime()                                logfile('%s  我要变身了,我成为接受方了  \n'%(time.ctime()))                                acceptserver()                            except:                                logfile('%s 变身不成功, \n'%(time.ctime()))    else:        acceptserver()#--------------------------------------------------------------------------## 定义接受包函数#--------------------------------------------------------------------------#def acceptserver():    in_data=raw_input('1为接收端')    if in_data=='1':        logfile('%s  DB为1,瓦咔咔,我要变成为发送方啦\n'%(time.ctime()))        sendserver()    else:        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((loaclhost_ip,3999))        while 1:            print "等待数据中。。。。"            d,a=s.recvfrom(1024)            if a[0]=='127.0.0.1':   #判断ip,不让他设置为127.0.0.1                windows_msg(" 'setting.ini'中的'GLOBAL'的字段不能设置为127.0.0.1",'警告')                sys.exit()            else:                print '等来的数据',d,'来自',a,time.ctime()                logfile('%s  等来的数据,%s,来自,%s\n'%(time.ctime(),d,a))                if d==loaclhost_ip:                                        print d,'是我的IP',"瓦咔咔,我要变成为发送方啦",time.ctime()                    logfile('%s %s是我的IP,瓦咔咔,我要变成为发送方啦\n'%(time.ctime(),d))                    sendserver()acceptserver()
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表