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

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

设定可以互相变身的两台机器的 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()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值