目标:实现发送端和接收端互相变身
分为 接收端
发送端
设定可以互相变身的两台机器的 IP.
发送端特征: 0、接到变身指令
1、检测本地MSSQL库
1)、如果可以访问就广播(本机IP)包给接收端
2)、如果不能访问就广播(另外一台机器的IP),然后变成接收端
接收端特征:0、接到变身指令
1、接受数据
1)、对比IP是否是自身IP,如果是,变身为发送端
分为 接收端
发送端
设定可以互相变身的两台机器的 IP.
发送端特征: 0、接到变身指令
1、检测本地MSSQL库
1)、如果可以访问就广播(本机IP)包给接收端
2)、如果不能访问就广播(另外一台机器的IP),然后变成接收端
接收端特征:0、接到变身指令
1、接受数据
1)、对比IP是否是自身IP,如果是,变身为发送端
#coding:gb2312
#主备切换器
import socket
import os
import pymssql
import ctypes
import time
import 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.1
2、网络未连接"
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()