begin process at 2010 09 04 12:01:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Python

 > 

Archives

 > 

Réseaux & Internet

 > 

Socket : charger ip depuis fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Socket : charger ip depuis fichier

mardi 11 janvier 2005 à 16:13:01 | Socket : charger ip depuis fichier

Shinji

Bonjour @ ttes et @ ts,

voici mon pb:

 j'essaye de faire une petite app client/serveur et j'aimerais pouvoir enregister l'ip/port du serveur dans un fichier pour pouvoir la réutiliser la prochaine fois que j'ouvre mon client

Je sais écrire et lire ces infos dans un fichier, mais au moment de les utiliser pour me connecter
il me sort une erreur ou je ne sais simplement rien envoyer.
Comment faire ?

Merci d'avance !

Précisions : je suis sous XP, j'ai Python 2.3.4 et j'utilise wxPython pour le visuel.
Le fichier InitsCli.txt contient ces 3 lignes:

###
192.168.0.1
50505
1024
###

voici le code client ( le code serveur est sensiblement similaire

#########################Début du code

from socket import *
from wxPython.lib.evtmgr import eventManager
from wxPython.wx import *

import Queue
import threading
import wx
import wx.lib.newevent

WINDOW_Height = 600
WINDOW_Width = 800

(ReceivedData, EVT_RCVD_DATA) = wx.lib.newevent.NewEvent()

class ConnectionManager (threading.Thread):
    def __init__ (self,Fenetre):
        threading.Thread.__init__ (self, target=self.run)
        self.Fenetre = Fenetre
        self.Socket = socket (AF_INET,SOCK_DGRAM)
        self.FOptions = open ("InitsCli.txt",'rb')
        self.Options = self.FOptions.readlines ()
        self.FOptions.close ()
        self.Socket_Buffer = int(self.Options[2])
        self.Socket_Host = self.Options[0]
        self.Socket_Port = int(self.Options[1])
        self.Socket.connect ((self.Socket_Host,self.Socket_Port))   <<LA OU CA COINCE>>
    def run (self):
        while 1:
            Donnee = self.Socket.recv (self.Socket_Buffer)
            if Donnee:
                Event = ReceivedData (value=Donnee)
                wx.PostEvent (self.Fenetre,Event)
    def Send (self,String):
        self.Socket.send (String)
    def Stop (self):
        if self.Socket:
            self.Socket.send ("/clientexit/")
            self.Socket.close ()

class Fenetre_Options_Client (wxFrame):
    def __init__ (self, parent, ID, title, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
        wx.Frame.__init__ (self, parent, ID, title, pos, size, style)
        Fenetre = wx.Panel (self, -1)
#Controles
        wx.StaticText (Fenetre, -1, "Serveur :", (20, 10))
        wx.StaticText (Fenetre, -1, "Port    :", (20, 30))
        wx.StaticText (Fenetre, -1, "Buffer  :", (20, 50))
        self.TextHost = wxTextCtrl (Fenetre, -1, "", pos=(120,10), size=wxDefaultSize, style=wxTE_PROCESS_ENTER)
        self.TextPort = wxTextCtrl (Fenetre, -1, "", pos=(120,30), size=wxDefaultSize, style=wxTE_PROCESS_ENTER)
        self.TextBuffer = wxTextCtrl (Fenetre, -1, "", pos=(120,50), size=wxDefaultSize, style=wxTE_PROCESS_ENTER)
        self.TextHost.SetEditable (True)
        self.TextPort.SetEditable (True)
        self.TextBuffer.SetEditable (True)
#Boutons
        self.BtnAnnuler = wx.Button (Fenetre, 1001, "Annuler")
        self.BtnOk = wx.Button (Fenetre, 1002, "Ok")
        self.BtnAnnuler.SetPosition ((20, 80))
        self.BtnOk.SetPosition ((140, 80))
#Events
        self.Bind (wx.EVT_BUTTON, self.OnAnnuler, self.BtnAnnuler)
        self.Bind (wx.EVT_BUTTON, self.OnOk, self.BtnOk)
        self.Bind (wx.EVT_CLOSE, self.OnCloseWindow)
        self.Bind (wx.EVT_TEXT_ENTER, self.OnOk, self.TextHost)
        self.Bind (wx.EVT_TEXT_ENTER, self.OnOk, self.TextPort)
        self.Bind (wx.EVT_TEXT_ENTER, self.OnOk, self.TextBuffer)
#Chargement des valeurs
        self.FOptions = open ("InitsCli.txt",'r')
        self.Options = self.FOptions.readlines ()
        self.FOptions.close ()
        self.TextHost.SetValue (self.Options[0])
        self.TextPort.SetValue (self.Options[1])
        self.TextBuffer.SetValue (self.Options[2])
#Derniers reglages
        self.BtnAnnuler.SetFocus ()
        self.CenterOnScreen ()
    def OnAnnuler (self,event):
        self.Close ()
    def OnOk (self,event):
        self.FOptions = open ("InitsCli.txt",'w+')
        self.Options[0] = self.TextHost.GetValue ()
        self.Options[1] = self.TextPort.GetValue ()
        self.Options[2] = self.TextBuffer.GetValue ()
        self.FOptions.writelines (self.Options)
        self.FOptions.close ()
        self.Close ()
    def OnCloseWindow (self,event):
        self.Destroy ()

class Fenetre_Principale (wxFrame):
#Initialisation fenetre
    def __init__ (self, parent, id, title):
        wxFrame.__init__ (self, parent, -1, title, size=(WINDOW_Width,WINDOW_Height))
#Menu
        menuBar = wx.MenuBar ()
        menuFichier = wx.Menu ()
        menuFichier.Append (101, "&Quitter")
        menuBar.Append(menuFichier, "&Fichier")
        menuOptions = wxMenu ()
        menuOptions.Append (201, "&Client")
        menuBar.Append(menuOptions, "&Options")
        self.SetMenuBar(menuBar)
        self.Bind(wx.EVT_MENU, self.OnClose, id=101)
        self.Bind(wx.EVT_MENU, self.MenuOptionsClient, id=201)
#Controles
        self.ConsoleText = wxTextCtrl (self, -1, "", pos=(0,0), size=(WINDOW_Width-10,WINDOW_Height-66), style=wxTE_READONLY|wxTE_MULTILINE)
        self.CommLine = wxTextCtrl (self, -1, "", pos=(0,WINDOW_Height-66), size=(WINDOW_Width-10,20), style=wxTE_PROCESS_ENTER)
#Events
        self.CommLine.Bind (wx.EVT_CHAR, self.ConsoleChar)
        self.Bind (wx.EVT_CLOSE, self.OnCloseWindow)
        self.Bind (wx.EVT_TEXT_ENTER, self.Console, self.CommLine)
        self.Bind(EVT_RCVD_DATA, self.OnReceivedData)
#Events Manager
        eventManager.Register (self.OnResize, wx.EVT_SIZE, self)
#Historique de la console
        self.ConsoleHistorique = []
        self.ConsoleHistoriqueNmro = 0
#Manager de connection
        self.ConnectionManager = ConnectionManager (self)
        self.ConnectionManager.start ()
#Dernier reglages et Affichage
        self.CommLine.SetFocus ()
        self.CenterOnScreen ()
        self.Show ()

        self.FOptions = open ("InitsCli.txt",'r')
        self.Options = self.FOptions.readlines ()
        self.FOptions.close ()
        self.ConsoleText.AppendText ("\n%s"%self.Options[0])
#Methodes
    def Console (self,event):
        self.string = event.GetString ()
        self.ConsoleHistorique.append (self.string)
        self.ConsoleHistoriqueNmro = len (self.ConsoleHistorique)
        self.ConsoleText.AppendText ("\n%s" % self.string)
        self.CommLine.Clear ()
        if self.string == "" : return
        if self.string[0] == '/' :
            if self.string == "/clearhistoric":
                self.ConsoleHistorique = []
                self.ConsoleHistoriqueNmro = 0
            elif self.string == "/historic": self.ConsoleText.AppendText ("\n%s" % self.ConsoleHistorique)
            elif self.string == "/quit": self.Close ()
            else: self.ConsoleText.AppendText ("Commande non reconnue : %s" % self.string)
        else: self.ConnectionManager.Send (self.string)
    def ConsoleChar (self, event):
        if event.GetKeyCode () == 317:
            self.ConsoleHistoriqueNmro -= 1
            if self.ConsoleHistoriqueNmro < 0:
                self.ConsoleHistoriqueNmro = 0
                event.Skip ()
        elif event.GetKeyCode () == 319:
            self.ConsoleHistoriqueNmro += 1
            if self.ConsoleHistoriqueNmro > len (self.ConsoleHistorique) + 1:
                self.ConsoleHistoriqueNmro = len (self.ConsoleHistorique)
                event.Skip ()
        if self.ConsoleHistoriqueNmro > -1 and self.ConsoleHistoriqueNmro < len (self.ConsoleHistorique):
            self.CommLine.SetValue (self.ConsoleHistorique[self.ConsoleHistoriqueNmro])
        event.Skip ()
    def MenuOptionsClient (self,event):
        FenetreClient = Fenetre_Options_Client (self, -1, "Options Client", size=(240, 140),style = wx.DEFAULT_FRAME_STYLE)
        FenetreClient.Show (True)
    def OnClose (self,event):
        self.ConnectionManager.Stop ()
        self.Close (True)
    def OnCloseWindow (self,event):
        self.ConnectionManager.Stop ()
        self.Destroy ()
    def OnReceivedData (self,event):
        self.ConsoleText.AppendText ("\n%s" % event.value)
    def OnResize (self, event):
        self.CenterOnScreen ()
       
class Client (wxApp):
    def OnInit (self):
        Fenetre = Fenetre_Principale ( None, -1, "Client" )
        self.SetTopWindow ( Fenetre )
        return True

App = Client (0)
App.MainLoop ()

#########################Fin du code

Python, ça ne commencerai pas par la même lettre que Pur et Plaisir ? ^_^
vendredi 14 janvier 2005 à 23:09:15 | Re : Socket : charger ip depuis fichier

Shinji

C'est bon les amis, le pb c'est qu'il faut que les adresses utilisées soient les mêmes.
Je m'explique : si le serveur écoute sur ('localhost':25252) et le client se connecte sur (192.168.0.55:25252) (par ex) et même si l'ip locale est 192.168.55 il n'arriveront pas à se connecter
il faut que les 2 adresses soient parfaitement identique. Soit (192.168.0.55:25252), soit ('localhost':25252) pour les deux.

____________________________________________________________
Python, ça ne commencerai pas par la même lettre que Pur et Plaisir ? ^_^
samedi 15 janvier 2005 à 14:03:04 | Re : Socket : charger ip depuis fichier

Bl0tCh

met toi en ecoute sur l'ip 0.0.0.0 et ce sera bon ;)
samedi 15 janvier 2005 à 14:12:32 | Re : Socket : charger ip depuis fichier

Shinji


L'ip 0.0.0.0 ? Cette ip me permettrai de communiquer avec des clients qui cherchent à se connecter sur 'localhost' et l'ip réseau (192.168.0.55) ?

Je vais essayer ça tiens ! Merci ! ^_^

____________________________________________________________
Python, ça ne commencerai pas par la même lettre que Pur et Plaisir ?
samedi 15 janvier 2005 à 15:53:51 | Re : Socket : charger ip depuis fichier

Bl0tCh

Oui comme ça il ecoute sur nimporte quelle ip qui mene à lui, dc l'ip du reseau local, 127.0.0.1 ou l'ip que ta sur internet


Cette discussion est classée dans : fenetre, self, options, event, wx


Répondre à ce message

Sujets en rapport avec ce message

Comment lancer son application !!!!!!!!!! [ par steede ] Voila, j'ai écrit (pompé) une malheureuse app (extraite d'un exemple "simple" de wx) et j'aimerais la faire fonctionner !!!!ci dessous la ligne de la Class has no attribute !?!? [ par RV2931 ] BonjourJ'ai récupéré un petit programme "Hello world" d'un tuto wxPython de développez.com que voici :# !/usr/bin/python#  -*- coding: iso885915 -*-im héritage de wxObject et polymorphisme ?? [ par RV2931 ] Bonjour,Je programme en wxPython et j'aurai voulu savoir comment dériver un objet wx pour faire un bouton personalisé par exemple, avec des informatio Porbleme affichage d'image avec pyqt [ par TYKO86 ] bonjour à tous, je suis débutant avec pyQt et je voudrais créer une classe qui me permet d'afficher des images mais mon soucis est je n'y arrive pas a Fenetre + menu + bouton pour un débutant [ par Yachas ] Bonjour, Je débute entièrement dans Python et tente de créer une simple application avec « wxPython » Je suis désolé de vous déranger pour des choses wxBoxSizer [ par Vonscott ] Salut à tous,Ceci est mon tout premier POST sur le forum ( mais certainement pas le dernier )Jusque la, je travaillais sous PHP/MySQL et j'ai voulu dé Récupérer la valeur choisie dans une liste déroulante [ par amaury74 ] Bonjours à tous,Ma question peu paraitre bête mais je n'ai pas trouvé de réponse claire.Voila: j'ai programmé une interface graphique avec wx.Python. Comment Afficher les donnes d'une BD dans WXGRID ??? [ par medmst ] slt a tousmon probleme est .. comment afficher les donnees d'un bd dans WXGRID ???mon code-source est : pas d'erreur de compilation mé il n'affiche ri Diverses questions et precision [ par sheorogath ] Bonjour,je me remets au python mais plus serieusement cette fois ci :palors j'ai plusieurs question sur des choses sur lesquels je trouve que peux d'i griser des textCtrl sous wx [ par mataxa ] Je veux faire un petit programme qui fais l'analyse de 4 valeur. Mais j'ai besoin de faire 4 teste distinct et j'aimerais blocquer les valeur suivant


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales