zengleo 发表于 2013-1-15 02:57:41

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

目标:实现发送端和接收端互相变身
分为接收端
      发送端

设定可以互相变身的两台机器的 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('%sDB为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=='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()
页: [1]
查看完整版本: python 写的udp服务器和客户端变身的程序。