Ciao, sono ancora qui, ho un po' di problemi, ti posto ciò che ho scritto fin'ora:
Codice Che andrà sul client windows XP:
e quello sul server che manderà dei messaggi al clientcodice:#!/usr/bin/env python import wx import wx.html import sys from socket import * class Frame(wx.Frame): def __init__(self,s,parent, id, title): print "Frame __init__" dlg = wx.MessageDialog(None, 'Procedo con il backup?', 'Caladan Backup Utility', wx.YES_NO | wx.ICON_QUESTION) result = dlg.ShowModal() dlg.Destroy() if(result == wx.ID_YES): window_width = 300; window_height = 200; wx.Frame.__init__(self, parent, id, title, (0,0),(window_width,window_height)) status = self.CreateStatusBar(2, 0, id); status.SetStatusText('gianiaz.net (C)') status.SetStatusText('giovanni b lenoci', 1) panel = wx.Panel(self); panel.SetBackgroundColour('White') self.html = wx.html.HtmlWindow(self, -1, pos=wx.DefaultPosition,size=(295, 150)) self.setHTML('prova'); else: self.Close() def setHTML(self, html): self.html.SetPage(html) def OnCloseMe(self, event): self.Close(True) def OnCloseWindow(self, event): self.Destroy() class messageReceived(wx.PyCommandEvent): def __init__(self, evtType, id): wx.PyCommandEvent.__init__(self, evtType, id) class App(wx.App): def __init__(self, s, redirect=True, filename=None): self.s = s; print s; wx.App.__init__(self, redirect, filename) def OnInit(self): print "OnInit" self.frame = Frame(s=self.s, parent=None, id=1, title='Startup') self.frame.Show() self.SetTopWindow(self.frame) return True def OnExit(self): print "OnExit" if __name__ == '__main__': host = "localhost" port = 21567 buf = 1024 addr = (host,port) UDPSock = socket(AF_INET,SOCK_DGRAM) UDPSock.bind(addr) data,addr = UDPSock.recvfrom(buf) # Receive messages while 1: data,addr = UDPSock.recvfrom(buf) print data if data: if(data == 'open') : opened = True app = App(redirect=False, filename=None, s=UDPSock) app.MainLoop() print 'hai chiuso la finestra' UDPSock.close() break
Ovviamente il codice è da sistemare, e non va ancora nulla...codice:#!/usr/bin/env python import sys from socket import * host = "localhost" port = 21567 buf = 1024 addr = (host,port) UDPSock = socket(AF_INET,SOCK_DGRAM) UDPSock.sendto('ping',addr) # Send messages while (1): data = raw_input('>> ') if not data: break else: if(UDPSock.sendto(data,addr)): print "Sent :",data # Close socket UDPSock.close()
Il problema che vorrei risolvere al momento è ricevere il messaggio sulla finestra.
Avevo pensato di mettere una finestra html e far passare dei messaggi.
Ma subito dopo l'init, sembra che i dati non arrivino più (ho provato a mettere un print data).
Probabilmente la mia scarsa conoscenza delle wxpython mi manda in confusione.
Penso che il problema sia che dopo l'init, mi trovo all'interno del Mainloop, quindi non ricevo più i dati.
Come dovrei fare?
Creare un evento che viene scaturito all'arrivo di un messaggio?
In tal caso dove verifico l'arrivo del messaggio?
Mi viene stupidamente da pensare che dovrei far arrivare la socket al mainloop, e da li verificare che sia arrivato qualcosa...
Anche se sono lontano dalla soluzione potete darmi qualche riferimento su cosa studiare per chiudere il cerchio?
ciao e grazie

Rispondi quotando