Hallo Leute,
sicherlich kennt jeder von Euch das Chatbeispiel mit dem Client- und Serverprogramm.
Meine Frage:
Hat schon jemand zu dem Python Chatbeispiel eine grafische Oberfläche programmiert, in dem man die IP-Adresse und Nachricht ein gibt und auch Nachricht wieder erhält?
Ich würde mich freuen, wenn Ihr mir helfen könnt.
hier das Beispiel:
http://www.galileocomputing.de/openbook ... 0a8629087d
            
			
									
						
										
						Tcp/IP-Grafische Oberfläche
Ja hab sowas mal gemacht aber nicht fertig und war auch so das erste was ich in Python gemacht hatte also nicht wundern 
hab 3 datein eine davon ist auf einen server .... bei mir Funpic.de weils kostenlos ist ^^
also der server:
Client
und die PHP datei
Der server holt sich die IP vom funpic server und schreibt diese per FTP in die ip.txt beim server ... der Client holt sie sich und kann dann connecten
            
			
									
						
										
						hab 3 datein eine davon ist auf einen server .... bei mir Funpic.de weils kostenlos ist ^^
also der server:
Code: Alles auswählen
import socket
import select
from ftplib import FTP
import urllib
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("", 51000))
server.listen(10)
clients = []
try:
    f = urllib.urlopen('URL zur PHP IP site')
    for zeile in f:
        sip = str(zeile)
    f.close()
except:
    print 'IP konnte nicht ermittelt werden!'
try:
    f = open('ip.txt', 'w')
    f.write(sip)
    f.close()
    f = open('ip.txt', 'r')
    fip = FTP('FTP ADDR')
    fip.login("USER", "PW")
    fip.storlines("STOR ip.txt", f)
    fip.quit()
    f.close()
except:
    print "Fehler beim IP versenden!"
else:
    print 'IP wurde gegeben'
command = raw_input()
user = {}
userlist = []
userlogin = {}
try:
    userdat = open('user.dat', 'r')
    for line in userdat:
        line2 = line.split(':')
        userlogin = {line2[1] : line[2]}
    userdat.close()
except:
    userdat = open('user.dat', 'w')
    userdat.close()
    
def usersend(users,clients):
    usertext = ''
    for user in users:
        print user
        usertext += '|'+user
    usertext += '|'
    for client in clients:
        client.send('-user'+usertext)
if command == "start":
    try:
        while True:
            lesen, schreiben, oob = select.select([server] + clients, [], [])
            for sock in lesen:
                if sock is server:
                    client, addr = server.accept()
                    clients.append(client)
                    print "+++ Client %s verbunden" % addr[0]
                else:
                    try:
                        nachricht = sock.recv(1024)
                    except:
                        print "Eine Verbindung wurde abgebrochen!"
                        userlist.remove(user[sock])
                        clients.remove(sock)
                    else:
                        ip = sock.getpeername()[0]
                        if nachricht != "-close":
                            msg = nachricht.split('|')
                            if msg[0] == "-chat":
                                s = "%s: %s" % (user[sock], msg[1])
                                print s
                                for csend in clients:
                                    csend.send(user[sock]+': '+msg[1])
                            if msg[0] == '-login':
                                if msg[1] in userlogin:
                                    if userlogin[msg[1]] == msg[2]:
                                        user = {sock : msg[1]}
                                    for csend in clients:
                                        csend.send(msg[1] + " connected zum Server")
                                        #csend.send('-useradd|'+msg[1])
                                        print msg[1] + " logged in"
                                else:
                                    user = {sock : msg[1]}
                                    userlogin = {msg[1] : msg[2]}
                                    userdat = open('user.dat', 'w')
                                    userdat.write(msg[1]+':'+msg[2])
                                    userdat.close()
                                userlist.append(msg[1])
                                usersend(userlist,clients)
                        else:
                            print "+++ Verbindung zu %s beendet" % ip
                            userlist.remove(user[sock])
                            sock.close()
                            clients.remove(sock)
    finally:
        for c in clients:
            c.close()
        server.close()
Code: Alles auswählen
#Main.py
#created by Hillkorn
        
import wx
import socket
import time
import threading
import thread
import urllib
import time
        
        
class cmwindow(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Messenger', wx.DefaultPosition, wx.Size(400,400))
        
        #Variablen
        self.einstellungen = {"Acc" : "",
                              "PW"  : ""}
        self.isconnect = False
        self.ifip = True
        try:
            f = urllib.urlopen('URL zur IP TXT')
            for zeile in f:
                self.ip = str(zeile)
            f.close()
        except:
            self.ip = ""        
        try:
            f = open("einstellungen.dat", "r")
        except:
            f = open("einstellungen.dat", "w")
        else:
            for line in f:
                vars = line.strip()
                vars = vars.split(" ")
                self.einstellungen[vars[0]] = vars[1]
            f.close()
        
        
        
        #MenuBar
        menubar = wx.MenuBar()
            
        programm = wx.Menu()
        einstellungen = wx.Menu()
        help = wx.Menu()
        
        programm.Append(105,'&Quit\tCtrl+Q', 'Quit the Application')
        self.Bind(wx.EVT_MENU, self.onQuit, id=105)
        einstellungen.Append(110,'Benutzer', 'Benutzerdaten')
        einstellungen.Append(111,'Get Server IP', 'IP Adresse holen')
        self.Bind(wx.EVT_MENU, self.onBenutzer, id=110)
        self.Bind(wx.EVT_MENU, self.onGetip, id=111)
        menubar.Append(programm,'&Programm')
        menubar.Append(einstellungen, '&Einstellungen')
        menubar.Append(help, '&Hilfe')                
        self.SetMenuBar(menubar)
        self.CreateStatusBar()
        
        
        
        #FensterInhalt
        box1 = wx.BoxSizer(wx.HORIZONTAL)
        box2 = wx.BoxSizer(wx.HORIZONTAL)
        box3 = wx.BoxSizer(wx.VERTICAL)
        
        panel = wx.Panel(self, -1)
        #panel2 = wx.Panel(panel, -1, size=(210,35))
        
        
        #text widgets
        self.text = wx.TextCtrl(panel, -1, style= wx.TE_READONLY | wx.TE_MULTILINE) 
        box1.Add(self.text, 2, wx.BOTTOM | wx.RIGHT | wx.EXPAND, 10)
        
        self.etext = wx.TextCtrl(panel, -1, style= wx.TE_MULTILINE)
        box2.Add(self.etext, 1, wx.EXPAND |wx.RIGHT, 10)
        
        #userliste
        self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT)
        self.list.InsertColumn(0, 'User')
        self.list.InsertColumn(1, 'Status')
        #self.list.SetColumnWidth(0, 150)
        #self.list.SetColumnWidth(0, 150)
        #self.list.InsertStringItem(0,'User')
        #self.list.SetStringItem(0,1,'Status')
        box1.Add(self.list, 1, wx.EXPAND | wx.RIGHT | wx.BOTTOM, 10)
        
        #buttons
        boxb = wx.BoxSizer(wx.VERTICAL)
        btn = wx.Button(panel, 11,"Senden")
        boxb.Add(btn, 0, wx.RIGHT, 5)
        btn = wx.Button(panel, 12,"Clear")
        boxb.Add(btn, 0)
        self.btnconnect = wx.Button(panel, 13,"Connect")
        boxb.Add(self.btnconnect, 0)
        self.Bind(wx.EVT_BUTTON, self.onSend, id= 11)
        self.Bind(wx.EVT_BUTTON, self.onClear, id= 12)
        self.Bind(wx.EVT_BUTTON, self.onConnect, self.btnconnect)
        box2.Add(boxb, 0)
        
        
        box3.Add(box1, 1, wx.EXPAND)
        box3.Add(box2, 0, wx.EXPAND)
        
        panel.SetSizer(box3)
        
        
    def onQuit (self, event):
        if self.isconnect is True:
            self.socket.send("-close")
            self.socket.close()
        #time.Sleep(2000)
        self.Close()
            
    def onBenutzer(self, event):
        bdialog = cbenutzer(self)
        
    def onGetip(self, event):
        f = urllib.urlopen('URL ZUR IP TXT')
        for zeile in f:    
            self.ip = str(zeile)
        f.close()
            
    def empf(self):
        while self.isconnect:
            try:
                msg = self.socket.recv(1024)+"\n"
                usersplit = msg.split('|')
                if '-user' == usersplit[0]:
                    usersplit.remove('-user')
                    usersplit.remove('\n')
                    s = self.list.GetItemCount()
                    #if s > 0:
                    #   s += 1
                    for i in range(s,-1,-1):
                        wx.CallAfter(self.list.DeleteItem, i)
                        pass
                    z = 0
                    for user in usersplit:
                        wx.CallAfter(self.list.InsertStringItem, z, user)
                        z +1
                else:
                    wx.CallAfter(self.text.AppendText, msg)
            except:
                wx.CallAfter(self.text.AppendText, 'iergendein scheiss fehler -.-')
    
    def login(self):
        self.socket.send('-login|'+self.einstellungen["Acc"]+'|'+self.einstellungen["PW"])
    
    def onConnect(self, event):
        if self.isconnect is not True:
            try:
                self.text.AppendText('Verbinde...')
                self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                self.socket.connect((self.ip ,51000))
            except:
                self.text.AppendText('Fehler beim Verbinden! Bitte pruefen sie der 51000 Port frei ist.')
            else:
                self.login()
                self.text.AppendText("Erfolgreich verbunden\n")
                self.btnconnect.SetLabel("Disconnect")
                self.isconnect = True
                thread.start_new_thread(self.empf, ())
        else:
            try:
                self.socket.send("-close")
                self.socket.close()
            except:
                self.text.AppendText("Fehler beim Beenden der Verbindung!")
            else:
                self.text.AppendText("Erfolgreich getrennt")
                self.btnconnect.SetLabel("Connect")
                self.isconnect = False
    def onSend(self, event):
        if self.isconnect is True:
            self.socket.send("-chat|"+self.etext.GetValue())
            self.etext.SetValue("")
        else:
            self.text.AppendText('Sie sind nicht mit dem Server Verbunden!')
    
    def onClear(self, event):
        self.etext.SetValue("")
                    
    
class cbenutzer(wx.Dialog):
    def __init__(self, parent):
        wx.Dialog.__init__(self, parent, -1, "Benutzer Daten", wx.DefaultPosition, wx.Size(200,130))
        self.einstellungen = parent.einstellungen
        if parent.ip:
            self.ip = parent.ip
        
        box = wx.BoxSizer(wx.VERTICAL)
        boxacc = wx.BoxSizer(wx.HORIZONTAL)
        boxpw = wx.BoxSizer(wx.HORIZONTAL)
        
        st = wx.StaticText(self, 10, "Account: ")
        self.acc = wx.TextCtrl(self, -1)
        self.acc.SetValue(parent.einstellungen["Acc"])
        if self.einstellungen["PW"] == "":
            self.pw.SetValue("default")
        boxacc.Add(st, 0)
        boxacc.Add(self.acc, 1, wx.LEFT, 30)
        box.Add(boxacc, 0)
        
        st = wx.StaticText(self, 11, "Passwort: ")
        self.pw = wx.TextCtrl(self, -1, style= wx.TE_PASSWORD)
        self.pw.SetValue(parent.einstellungen["PW"])
        if self.pw.GetValue == "":
            self.pw.SetValue("default")
        boxpw.Add(st, 0)
        boxpw.Add(self.pw, 1, wx.LEFT | wx.BOTTOM, 25)
        box.Add(boxpw, 0)
                
        buttons = self.CreateButtonSizer(wx.OK | wx.CANCEL)
        box.Add(buttons, 0, wx.ALIGN_CENTRE)
        
        self.Bind(wx.EVT_BUTTON, self.onOK, id= wx.ID_OK)
        self.Bind(wx.EVT_BUTTON, self.onCancel, id= wx.ID_CANCEL)
        self.SetSizer(box)
        self.Show(True)
        
    def onOK(self, event):
        self.einstellungen["Acc"] = str(self.acc.GetValue())
        self.einstellungen["PW"] = str(self.pw.GetValue())
        
        f = open("einstellungen.dat", "w")
        for key in self.einstellungen:
            f.write(key + " " + self.einstellungen[key] + "\n")    
        f.close()
        self.Show(False)
        
    def onCancel(self, event):
        self.Show(False)
                
        
class cprogramm(wx.App):
    def OnInit(self):
        frame = cmwindow()
        frame.Show(True)
        return True
        
app = cprogramm()
app.MainLoop()
Code: Alles auswählen
<?
$ipadresse ="$REMOTE_ADDR";
echo $ipadresse;
?>