# -*- coding: utf-8 -*- # __author__ = 'hejunwang' ########################################################################### ## Python code generated with wxFormBuilder (version Jun 17 2015) ## http://www.wxformbuilder.org/ ## ## PLEASE DO "NOT" EDIT THIS FILE! ########################################################################### import threading import sys import os import socket import time import struct import logging import wx import wx.xrc # 统一使用utf-8格式 default_encoding = 'utf-8' if sys.getdefaultencoding() != default_encoding: reload(sys) sys.setdefaultencoding(default_encoding) PORT = 54321 VERSION = 1.0 class R(): def __init__(self): pass @staticmethod def exit(): os.system("kill -9 " + str(os.getpid())) # 杀掉进程 # 接收数据 class MulticastServerWorker(threading.Thread): def __init__(self, sock): threading.Thread.__init__(self) self.sock = sock self.r = 1 print "MulticastServerWorker" logging.debug("MulticastServerWorker") def run(self): sock = self.sock packSize = 1024 while self.r: data, client = sock.recvfrom(packSize) # time.sleep(1) print data, client logging.debug("MulticastServerWorker recvfrom ") sock.sendto("bbbbb", client) # 组播 class MulticastServer(threading.Thread): def __init__(self, addr, destaddr): threading.Thread.__init__(self) self.addr = addr sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 20) # mreq = struct.pack("=4sl", socket.inet_aton(destaddr), socket.INADDR_ANY) # sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) sock.bind(addr) self.sock = sock self.destaddr = destaddr worker = MulticastServerWorker(sock) worker.start() print "MulticastServer" logging.debug("MulticastServer") print self.addr print self.destaddr self.r = 1 def run(self): sock = self.sock packsize = 1024 # data = " i'm MulticastServer" print "run" logging.debug("run") # data = self.msg # print 'data :%s' %data addr1 = ('224.0.0.1', 9898) while self.r: print "send to message" logging.debug("send to message") sock.sendto("aaaaa", addr1) time.sleep(10) # 广播 class BroadcastClientWorker(threading.Thread): def __init__(self, sock): threading.Thread.__init__(self) self.sock = sock self.r = 1 def run(self): sock = self.sock packSize = 1024 while self.r: data, client = sock.recvfrom(packSize) print u"BroadcastClientWorker 接收到数据--->", data, client logging.debug("接收到数据:" + str(data) + ";" + str(client)) # 本机地址 myname = socket.getfqdn(socket.gethostname()) myaddr = socket.gethostbyname(myname) print myname print myaddr print "广播地址:", client[0] if myaddr == client[0]: print "广播地址为本机地址,不做处理" logging.debug("广播地址为本机地址,不做处理" + str(myaddr)) continue class BroadcastClient(threading.Thread): def __init__(self, addr, destaddr): threading.Thread.__init__(self) self.addr = addr sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(addr) self.sock = sock self.destaddr = destaddr self.r = 1 # worker = BroadcastClientWorker(sock) # worker.start() def run(self): sock = self.sock # print "BroadcastClient" while (self.r): sock.sendto("BroadcastClient", self.destaddr) print u"BroadcastClient发送数据-->", self.destaddr logging.debug("BroadcastClient发送数据" + str(self.destaddr)) time.sleep(5) # 执行一次广播 class BroadcastOnce(threading.Thread): def __init__(self, addr, destaddr,message): threading.Thread.__init__(self) logging.debug("BroadcastOnce") self.addr = addr sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(addr) self.sock = sock self.destaddr = destaddr self.r = 1 self.msg = message def run(self): sock = self.sock sock.sendto(self.msg, self.destaddr) print u"BroadcastOnce-->", self.destaddr logging.debug("BroadcastOnce" + str(self.destaddr)) # 接收线程 class receiveThread(threading.Thread): def __init__(self, add, window): threading.Thread.__init__(self) self.window = window self.timeToQuit = threading.Event() self.timeToQuit.clear() logging.debug('receiveThread init ') print 'receiveThread ...' sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(add) self.BUFSIZE = 1024 self.socket = sock def run(self): while True: data, client = self.socket.recvfrom(self.BUFSIZE) if client[0] == '': print 'Wait for client ...' logging.debug("Wait for client ...") else: logging.debug("接收到数据:" + str(data) + ";" + str(client)) print 'received data:', data print 'from------>', client time.sleep(1) # 本机地址 myname = socket.getfqdn(socket.gethostname()) myaddr = socket.gethostbyname(myname) # print myname # print myaddr print "广播地址:", client[0] if myaddr == client[0]: print "本机地址在广播...." logging.debug("广播地址为本机地址,不做处理" + myaddr) message1 =client[0] message2 =data wx.CallAfter(self.window.UpdataListBox,message1,message2) # continue else: print "等待显示到panel上" message1 = client[0] message2 = data wx.CallAfter(self.window.UpdataListBox,message1,message2) ########################################################################### ## Class MyFrame1 ########################################################################### class MyFrame1(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"UDP_SERVER", pos=wx.DefaultPosition, size=wx.Size(910, 530), style=wx.CLOSE_BOX | wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) # 2s后 启动接收端 wx.FutureCall(2000, self.sockreceive, "5s will call sockreive", name="socketreceive") self.initUi() self.menuInit() self.logcat() self.bindPlug() def sockreceive(self, *args, **kwargs): print 'start socket receive' logging.debug("开启线程 开始等待client 接入....") # 本机地址 myname = socket.getfqdn(socket.gethostname()) receiveaddr = socket.gethostbyname(myname) # print myname # print receiveaddr add = (receiveaddr, PORT) print 'receiveThread(add).start()' receiveThread(add, self).start() # init UI def initUi(self): bSizer1 = wx.BoxSizer(wx.HORIZONTAL) self.m_panel1 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) bSizer2 = wx.BoxSizer(wx.HORIZONTAL) bSizer7 = wx.BoxSizer(wx.VERTICAL) sbSizer2 = wx.StaticBoxSizer(wx.StaticBox(self.m_panel1, wx.ID_ANY, u"客户端"), wx.HORIZONTAL) bSizer10 = wx.BoxSizer(wx.VERTICAL) bSizer9 = wx.BoxSizer(wx.HORIZONTAL) self.m_statatictext = wx.StaticText(sbSizer2.GetStaticBox(), wx.ID_ANY, u"地址:", wx.DefaultPosition, wx.DefaultSize, 0) self.m_statatictext.Wrap(-1) bSizer9.Add(self.m_statatictext, 0, wx.ALL, 5) self.m_textCtrl1 = wx.TextCtrl(sbSizer2.GetStaticBox(), wx.ID_ANY, u"255.255.255.255", wx.DefaultPosition, wx.DefaultSize, 0) bSizer9.Add(self.m_textCtrl1, 1, wx.ALL, 5) bSizer10.Add(bSizer9, 0, wx.EXPAND, 5) bSizer11 = wx.BoxSizer(wx.HORIZONTAL) self.m_staticText4 = wx.StaticText(sbSizer2.GetStaticBox(), wx.ID_ANY, u"端口:", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText4.Wrap(-1) bSizer11.Add(self.m_staticText4, 0, wx.ALL, 5) self.m_textCtrl4 = wx.TextCtrl(sbSizer2.GetStaticBox(), wx.ID_ANY, u"54321", wx.DefaultPosition, wx.DefaultSize, 0) bSizer11.Add(self.m_textCtrl4, 1, wx.ALL, 5) bSizer10.Add(bSizer11, 1, wx.EXPAND, 5) bSizer101 = wx.BoxSizer(wx.HORIZONTAL) self.m_staticText41 = wx.StaticText(sbSizer2.GetStaticBox(), wx.ID_ANY, u"信息:", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText41.Wrap(-1) bSizer101.Add(self.m_staticText41, 0, wx.ALL, 5) self.m_textCtrl3 = wx.TextCtrl(sbSizer2.GetStaticBox(), wx.ID_ANY, u"1", wx.DefaultPosition, wx.DefaultSize, 0) bSizer101.Add(self.m_textCtrl3, 1, wx.ALL, 5) bSizer10.Add(bSizer101, 1, wx.EXPAND, 5) bSizer91 = wx.BoxSizer(wx.VERTICAL) self.m_button2 = wx.Button(sbSizer2.GetStaticBox(), wx.ID_ANY, u"发送", wx.DefaultPosition, wx.DefaultSize, 0) bSizer91.Add(self.m_button2, 0, wx.ALL | wx.ALIGN_RIGHT, 5) bSizer10.Add(bSizer91, 1, wx.EXPAND, 5) sbSizer2.Add(bSizer10, 1, wx.EXPAND, 5) bSizer7.Add(sbSizer2, 1, wx.EXPAND, 5) sbSizer3 = wx.StaticBoxSizer(wx.StaticBox(self.m_panel1, wx.ID_ANY, u"发送/接收端"), wx.VERTICAL) bSizer12 = wx.BoxSizer(wx.HORIZONTAL) self.m_staticText7 = wx.StaticText(sbSizer3.GetStaticBox(), wx.ID_ANY, u"内容:", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText7.Wrap(-1) bSizer12.Add(self.m_staticText7, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) m_choice3Choices = [u"组播 ", u"广播 ", u"广播3 "] self.m_choice3 = wx.Choice(sbSizer3.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_choice3Choices, 0) bSizer12.Add(self.m_choice3, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) self.m_button3 = wx.Button(sbSizer3.GetStaticBox(), wx.ID_ANY, u"发送广播", wx.DefaultPosition, wx.DefaultSize, 0) bSizer12.Add(self.m_button3, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) sbSizer3.Add(bSizer12, 0, wx.EXPAND, 5) bSizer7.Add(sbSizer3, 1, wx.EXPAND, 5) bSizer2.Add(bSizer7, 1, wx.EXPAND, 5) self.m_staticline1 = wx.StaticLine(self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL | wx.LI_VERTICAL) bSizer2.Add(self.m_staticline1, 0, wx.EXPAND | wx.ALL, 5) bSizer8 = wx.BoxSizer(wx.VERTICAL) sbSizer4 = wx.StaticBoxSizer(wx.StaticBox(self.m_panel1, wx.ID_ANY, u"返回状态"), wx.HORIZONTAL) self.m_listBox2Choices = [] self.m_listBox2 = wx.ListBox(sbSizer4.GetStaticBox(), wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, self.m_listBox2Choices, wx.LB_HSCROLL | wx.LB_SINGLE) sbSizer4.Add(self.m_listBox2, 1, wx.ALL | wx.EXPAND, 5) bSizer8.Add(sbSizer4, 1, wx.EXPAND, 5) bSizer2.Add(bSizer8, 1, wx.EXPAND, 5) self.m_panel1.SetSizer(bSizer2) self.m_panel1.Layout() bSizer2.Fit(self.m_panel1) bSizer1.Add(self.m_panel1, 1, wx.EXPAND | wx.ALL, 5) self.SetSizer(bSizer1) # menu def menuInit(self): self.Layout() self.m_menubar1 = wx.MenuBar(0) self.m_menu1 = wx.Menu() self.m_menuItem1 = wx.MenuItem(self.m_menu1, wx.ID_ANY, u"创建", wx.EmptyString, wx.ITEM_NORMAL) self.m_menu1.AppendItem(self.m_menuItem1) self.m_menu1.AppendSeparator() self.m_menuItem4 = wx.MenuItem(self.m_menu1, wx.ID_ANY, u"退出", wx.EmptyString, wx.ITEM_NORMAL) self.m_menu1.AppendItem(self.m_menuItem4) self.m_menubar1.Append(self.m_menu1, u"文件") self.m_menu2 = wx.Menu() self.m_menuItem2 = wx.MenuItem(self.m_menu2, wx.ID_ANY, u"配置", wx.EmptyString, wx.ITEM_NORMAL) self.m_menu2.AppendItem(self.m_menuItem2) self.m_menubar1.Append(self.m_menu2, u"编辑") self.m_menu3 = wx.Menu() self.m_menuItem3 = wx.MenuItem(self.m_menu3, wx.ID_ANY, u"关于", wx.EmptyString, wx.ITEM_NORMAL) self.m_menu3.AppendItem(self.m_menuItem3) self.m_menubar1.Append(self.m_menu3, u"帮助") self.SetMenuBar(self.m_menubar1) self.m_statusBar1 = self.CreateStatusBar(1, wx.ST_SIZEGRIP, wx.ID_ANY) self.Centre(wx.BOTH) pass # bind event def bindPlug(self): # Connect Events self.m_button2.Bind(wx.EVT_BUTTON, self.OnSend) self.m_choice3.Bind(wx.EVT_CHOICE, self.OnChose) self.m_button3.Bind(wx.EVT_BUTTON, self.OnStartUdpSend) self.Bind(wx.EVT_MENU, self.OnClose, id=self.m_menuItem4.GetId()) self.Bind(wx.EVT_MENU, self.OnAbout, id=self.m_menuItem3.GetId()) # logcat def logcat(self): logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='LogCat_' + time.strftime('%Y-%m-%d-%H-%M-%S') + '.log', filemode='w') def UpdataListBox(self,message1,message2): message =message1+":"+message2 #重复地址处理 print message1 print self.m_listBox2Choices if message in self.m_listBox2Choices: print "message-->"+message1 else: print "把信息添加到listbox" self.m_listBox2Choices.append(message) #更新设置listbox self.m_listBox2.Set(self.m_listBox2Choices) # Virtual event handlers, overide them in your derived class def OnSend(self, event): if self.m_textCtrl1.GetValue()!="" and int(self.m_textCtrl4.GetValue())<65535 and self.m_textCtrl3.GetValue()!="": print self.m_textCtrl1.GetValue() print self.m_textCtrl4.GetValue() print self.m_textCtrl3.GetValue() print "发送一次广播" LocalIP1 = socket.gethostbyname(socket.gethostname()) print "LocalIP1", LocalIP1 BROADCASTADDRESS ='255.255.255.255' BroadcastOnce((LocalIP1,PORT),(BROADCASTADDRESS,PORT),self.m_textCtrl3.GetValue()).start() # event.Skip() def OnChose(self, event): print self.m_choice3.GetString(self.m_choice3.GetSelection()) print self.m_choice3.GetSelection() print self.m_choice3.GetStringSelection(), self.m_choice3.GetCurrentSelection() if self.m_choice3.GetSelection() == 0: print '选择了-->%s' % self.m_choice3.GetString(self.m_choice3.GetSelection()) self.chosenumber = 0 elif self.m_choice3.GetSelection() == 1: print '选择了-->%s' % self.m_choice3.GetString(self.m_choice3.GetSelection()) self.chosenumber = 1 elif self.m_choice3.GetSelection() == 2: print '选择了-->%s' % self.m_choice3.GetString(self.m_choice3.GetSelection()) self.chosenumber = 2 event.Skip() def OnStartUdpSend(self, event): print 'startudpsend' logging.debug('OnStartUdpSend') if self.chosenumber == 0: print 'startudpsend self.m_choice3.GetSelection broadcast0' self.message0 = 'broadcast0' addr = '224.0.1.255' server = MulticastServer(("0.0.0.0", PORT), addr) server.start() elif self.chosenumber == 1: print 'startudpsend self.m_choice3.GetSelection SOCK_DGRAM' LocalIP = socket.gethostbyname(socket.gethostname()) print "LocalIP", LocalIP BROADCASTADDRESS ='255.255.255.255' # server(接收端) 发送端 server3 = BroadcastClient((LocalIP, PORT), (BROADCASTADDRESS, PORT)) server3.start() elif self.chosenumber == 2: print 'startudpsend self.m_choice3.GetSelection broadcast2' event.Skip() def OnClose(self, event): print "OnClose" self.Destroy() event.Skip() def OnAbout(self, event): print "OnAbout" description = """The tool is made for better execution of android automaiton ,the code is python and the current version is """ + str( VERSION) + """ and will be updatad slowly,if there is a problem is exuecution ,contact me ,My name is toby""" info = wx.AboutDialogInfo() info.SetVersion(str(VERSION)) info.SetDescription(description) info.AddDeveloper('JUNWANG He,Email: [email protected]') wx.AboutBox(info) event.Skip() if __name__ == '__main__': app = wx.App() MyFrame1(None).Show() app.MainLoop()
udpBroadcast_socketclient
猜你喜欢
转载自blog.csdn.net/hejunw/article/details/74912383
今日推荐
周排行